LoginSignup
69
86

More than 5 years have passed since last update.

XAMPP/MAMPの代わりにDocker ToolboxでLAMP環境を構築する(Docker入門ハンズオン)

Last updated at Posted at 2016-03-28

このハンズオンの概要と目的

XAMPPMAMPを使えば、手元のPCにLinux, Apache, MySQL, PHP (LAMP) の環境を手軽に構築できます。

Docker Toolboxを使えば、XAMPP/LAMPと同じことが、それら以上に柔軟に可能です。
Dockerの入門ハンズオンとして、Docker ToolboxでLAMP環境を構築してみましょう。

検証環境

  • Windows 7 Professional Service Pack 1 (64-bit)
  • Docker version 1.9.1, build a34a1d5
  • docker-compose version: 1.5.1
  • docker-machine version 0.5.1 (7e8e38e)

基本的な操作だけなので、バージョンは厳密に揃えなくて構いません。
私は未検証ですが、Windows 8や10でも大丈夫なはず1です。

Mac OS Xでも可能です(こちらは検証しました2)。
手順の中のコマンドがほんの一部変わるだけですので、トライしてみてください。

ハンズオン手順(基礎)

大まかな流れは次の通りです:

  1. ツールをインストール:
    Docker Toolboxをインストールし、Docker Quickstart Terminalを起動します。
  2. 設定ファイルを用意:
    LAMP環境を設定するファイルと、PHPの動作確認のための簡単なスクリプトを用意します。
  3. 起動と動作確認:
    Docker Composeを使ってLAMP環境を起動し、ブラウザーから動作を確認します。
  4. 立ち下げと後片付け 環境を「使い捨て」してみます。

ツールのインストールに時間がかかるため(インストーラーが170 MB以上あります)、ダウンロードを待つ間に設定ファイルを用意するとよいです。

Docker ToolboxのインストールとDocker Quickstart Terminalの起動

公式サイトを参照してDocker Toolboxをインストールします:
https://www.docker.com/products/docker-toolbox

Oracle VirtualBox(VMミドルウェア、必須)3と、Docker Quick Terminal、Kitematic(任意ですが、ここではインストールを選びます)が同時にインストールされます。

インストールが完了したら、Docker Quickstart Terminalを起動します。
以下のようなクジラのコンソールが現れれば成功です:


                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/

docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com


kazuma@PC MINGW64 ~
$

LAMP環境の設定ファイルと、PHPスクリプトの準備

ユーザーフォルダー配下の任意の場所(たとえばC:\Users\kazuma\work\2016\mar28)に、以下のファイルを用意します:

  • docker-compose.yml
  • src/phpinfo.php
docker-compose.yml
mysql:
    image: mysql:5.7.11
    environment:
        - MYSQL_ROOT_PASSWORD=root
apache-php:
    image: php:5.6.19-apache
    ports:
        - "80:80"
    volumes:
        - ./src:/var/www/html
    links:
        - mysql:db
phpmyadmin:
    image: phpmyadmin/phpmyadmin:4.5.3.1-1
    ports:
        - "8080:8080"
    links:
        - mysql:db
src/phpinfo.php
<?php
phpinfo();

Docker ComposeでLAMP環境を起動し、動作確認

docker-compose up -d

docker-compose.ymlに定義したLAMP環境を起動します。
初回はイメージファイルをダウンロードする時間がかかります:

kazuma@PC MINGW64 ~
$ cd ~/work/2016/mar28/

kazuma@PC MINGW64 ~/work/2016/mar28
$ pwd
/c/Users/kazuma/work/2016/mar28

kazuma@PC MINGW64 ~/work/2016/mar28
$ ls -Ap1R
.:
docker-compose.yml
src/

./src:
phpinfo.php

kazuma@PC MINGW64 ~/work/2016/mar28
$ docker-compose up -d
# ...
# ダウンロードの進捗...
# ...
Creating mar28_mysql_1
Creating mar28_apache-php_1
Creating mar28_phpmyadmin_1

docker-compose ps

起動したことを確認します。
Stateが"Up"になっていれば成功です:

kazuma@PC MINGW64 ~/work/2016/mar28
$ docker-compose ps
       Name                 Command          State           Ports
---------------------------------------------------------------------------
mar28_apache-php_1   apache2-foreground      Up      0.0.0.0:80->80/tcp
mar28_mysql_1        /entrypoint.sh mysqld   Up      3306/tcp
mar28_phpmyadmin_1   /run.sh                 Up      0.0.0.0:8080->8080/tcp

docker-machine ip default

ApacheとphpMyAdminに接続します。
docker-compose psの結果を見ると、Apacheはポート80、phpMyAdminはポート8080で待ち受けているようです。
IPはlocalhostではないので、以下のコマンドで確認します:

kazuma@PC MINGW64 ~/work/2016/mar28
$ docker-machine ip default
192.168.99.100

このIPアドレスをブラウザーに打ち込むか、以下のようなコマンドでブラウザーを起動します:

kazuma@PC MINGW64 ~/work/2016/mar28
$ start http://$(docker-machine ip default)/phpinfo.php

kazuma@PC MINGW64 ~/work/2016/mar28
$ start http://$(docker-machine ip default):8080/

以下のように、phpinfo()の画面と「phpMyAdminへようこそ」の画面が、それぞれ表示されれば成功です!

160328 phpinfo small.png

160328 phpMyAdmin small.png

立ち下げと後片付け

Dockerの持つ柔軟性のひとつに、環境を「使い捨て」できるというものがあります。
サーバーを停止し、実行中に生じた変更(ログファイル生成や、今回はしていませんがコンフィグの変更など)を破棄します。

docker-compose stop

サーバーを停止します。

kazuma@PC MINGW64 ~/work/2016/mar28
$ docker-compose ps
       Name                 Command          State           Ports
---------------------------------------------------------------------------
mar28_apache-php_1   apache2-foreground      Up      0.0.0.0:80->80/tcp
mar28_mysql_1        /entrypoint.sh mysqld   Up      3306/tcp
mar28_phpmyadmin_1   /run.sh                 Up      0.0.0.0:8080->8080/tcp

kazuma@PC MINGW64 ~/work/2016/mar28
$ docker-compose stop
Stopping mar28_phpmyadmin_1 ...
Stopping mar28_apache-php_1 ...
Stopping mar28_mysql_1 ...
[3Bping mar28_phpmyadmin_1 ... done
kazuma@PC MINGW64 ~/work/2016/mar28
$ docker-compose ps
       Name                 Command           State     Ports
-------------------------------------------------------------
mar28_apache-php_1   apache2-foreground      Exit 0
mar28_mysql_1        /entrypoint.sh mysqld   Exit 0
mar28_phpmyadmin_1   /run.sh                 Exit 137

Stateが"Exit"に変わりました。
先ほどのブラウザー画面を更新してみれば、サーバーが止まったことを実感できます。

docker-compose rm

環境を捨てます。
yを入力して処理をすすめるか、はじめからdocker-compose rm -fとして強制削除します。

kazuma@PC MINGW64 ~/work/2016/mar28
$ docker-compose rm
Going to remove mar28_phpmyadmin_1, mar28_apache-php_1, mar28_mysql_1
Are you sure? [yN] y
Removing mar28_phpmyadmin_1 ...
Removing mar28_apache-php_1 ...
Removing mar28_mysql_1 ...
[2Bving mar28_apache-php_1 ... done
kazuma@PC MINGW64 ~/work/2016/mar28
$ docker-compose ps
Name   Command   State   Ports
------------------------------

kazuma@PC MINGW64 ~/work/2016/mar28
$

サーバー実行中に生じた変更は全て破棄されましたが、docker-compose up -dコマンドで同じ環境を再現できるので大丈夫です。
次の実行時は、イメージファイルをキャッシュしてあるので、初回より短時間で起動するはずです。

ハンズオン手順(応用)

TBD: LAMP環境を複数立ち上げる

まとめ

「XAMPP/MAMP以上の柔軟性」について説明できていないので、あと少し解説とエクストラの手順を追記する予定です。

また、この記事とは別で、Dockerfileを使ったMySQL、Apacheのカスタマイズと、WordPressのインストールを説明する予定です。

リンク

Docker Hubのオフィシャルイメージを使ったLAMP環境(Apache+PHP+MySQL)構築 - Qiita
Docker Composeを使ってLAMP環境を立ち上げる - Qiita


  1. この記事の手順でうまくいった!という方はコメントをくださると非常に嬉しいです。 

  2. OS X El Capitan (10.11.3) にて確認 

  3. VirtualBoxを起動するには、ハードウェア仮想化を有効にする必要があります。Docker Toolboxインストールの手順(英語ですが)に書いてあるので、確認してください。 

69
86
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
69
86