2015-08-17 追記
Docker Toolbox を利用した環境構築をベースにしたものへ説明文を変更。
前回 で作成して稼働させた Nginx + PHP-FPM の 2 コンテナ構成のものをベースにして、複数の Docker コンテナを稼働させるための定義ファイルを記述してビルドから起動までを解決してくれる Docker Compose を使って行うようにしてみる。Docker Compose は初回 にて導入した Docker Toolbox に同梱されているため、すぐに利用することができる。
念のため前回構築したコンテナは完全に消しておくことにする。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e8a253038295 sandbox-phpinfo-nginx "nginx -g 'daemon of 10 hours ago Exited (0) 10 seconds ago nginx
0be18a7d222f sandbox-phpinfo-phpfpm "php-fpm" 10 hours ago Exited (0) 10 seconds ago phpfpm
$ docker rm nginx phpfpm
Docker Compose の定義ファイル
Docker Composeの定義ファイルとして docker-compose.yml
を作成。ここでは前回に docker の build や run の際に指定していたオプションの内容などを、決められた定義ファイルパラメータとして記述する。
今回用意した定義ファイルは以下のとおり、コンテナに対してそのイメージを構築するためのポインタをはじめとして、前回オプションとして指定していたポートマッピングとコンテナ間連携のリンク設定値を記述している。
web:
build: nginx
ports:
- 80:80
links:
- app:php
app:
build: phpfpm
動作確認
docker-compose up
コマンドで、コンテナ作成と起動までを一発で行う。必要ならばコンテナのイメージ作成も最初にやってくれる。
$ docker-compose up -d
Building app...
Step 0 : FROM php:fpm
---> 1f4ac3cf4d04
Step 1 : COPY index.php /var/www/html/
---> 6f909ff1d867
Removing intermediate container 6fee3f3511fe
Step 2 : CMD php-fpm
---> Running in 7a5f58164968
---> 346b2956c9c4
Removing intermediate container 7a5f58164968
Successfully built 346b2956c9c4
Creating sandboxdockerphpinfonginxphpfpm_app_1...
Building web...
Step 0 : FROM nginx
---> 319d2015d149
Step 1 : ADD server.conf /etc/nginx/conf.d/server.conf
---> 5f7943757e76
Removing intermediate container 9430dab8601e
Successfully built 5f7943757e76
Creating sandboxdockerphpinfonginxphpfpm_web_1...
docker のイメージ作成とコンテナ起動と構成までのすべてが一発で完了している。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
db3090a2f4ae sandboxdockerphpinfonginxphpfpm_web "nginx -g 'daemon of 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp, 443/tcp sandboxdockerphpinfonginxphpfpm_web_1
0a84b1c0323d sandboxdockerphpinfonginxphpfpm_app "php-fpm" 2 minutes ago Up 2 minutes 9000/tcp sandboxdockerphpinfonginxphpfpm_app_1
同等の内容は docker-compose ps
の方でも確認することができる。
$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------
sandboxdockerphpinfonginxphpfpm_app_1 php-fpm Up 9000/tcp
sandboxdockerphpinfonginxphpfpm_web_1 nginx -g daemon off; Up 443/tcp, 0.0.0.0:80->80/tcp
ブラウザでアクセスすると、きちんと PHP-FPM による phpinfo() が表示される。(前回の内容と一緒。)
docker-compose start
, docker-compose stop
コマンドで管理下にある全コンテナをまとめて起動、停止できる。サービスとして up, down する目的であればいちいち1つずつ docker コマンドを使う必要はない。また明示的に指定すればそれだけを start, stop することもできる。
$ docker-compose start
$ docker-compose stop
docker-compose rm
コマンドで、停止したコンテナを対象にしたコンテナ削除処理が行える。ちゃんと問い合わせが1つ挟まっているし、停止していないコンテナの場合は削除処理自体一切行われないので安心。
$ docker-compose rm
Going to remove sandboxdockerphpinfonginxphpfpm_web_1, sandboxdockerphpinfonginxphpfpm_app_1
Are you sure? [yN] y
Removing sandboxdockerphpinfonginxphpfpm_app_1...
Removing sandboxdockerphpinfonginxphpfpm_web_1...
サンプルソース
今回利用したサンプルソース。