昨日の記事までで簡単なDockerコンテナを組み合わせた開発環境の構築はできました。
しかし、その時に書いたようにいろんなオプションをつけた状態で毎回一つ一つrunするのは面倒すぎるし、お互いを参照させるためには起動の順番などに依存関係があるので気をつける必要がありました。
そんな時は、Docker Composeを使えば簡単解決!!
目次
Docker Composeってなに?
簡単に言えば、前回の記事で起動させた一つ一つのコンテナの起動条件をすべてdocker-compose.yamlというyamlファイルにまとめて実行するものです。
Dockerfileが各サーバプロセスの設計書だとすれば、docker-compose.yamlはサーバアプリケーションの設計書のようなものです。
復習
前回のdocker runのオプションを復習してみます。
PostgreSQL
$ docker run -d -p 5432:5432 --name postgresql test/postgresql
php-phalcon
$ docker run -d -v /Users/abe/dockers/www:/var/www --link postgresql:db --name phalcon test/phalcon
nginx
$ docker run -d -v /Users/abe/dockers/www:/var/www --name nginx -p 80:80 -v /Users/abe/dockers/conf/phalcon_nginx.conf:/etc/nginx/sites-enabled/default --volumes-from phalcon nginx
docker-compose.yaml
これらのオプションをyamlにまとめます。書き方はほぼそのままなのでわかりやすいと思います。
# postgres 公式イメージに変更しました postgresql: image: postgres:9.5 ports: - "5432:5432" environment: POSTGRES_USER: docker POSTGRES_PASSWORD: docker POSTGRES_DB: docker # php-phalcon phalcon: build: ./php-phalcon-fpm volumes: - /Users/abe/dockers/www:/var/www links: - postgresql:db # nginx nginx: build: ./nginx volumes: - /Users/abe/dockers/www:/var/www - /Users/abe/dockers/conf/phalcon_nginx.conf:/etc/nginx/sites-enabled/default volumes_from: - phalcon ports: - "80:80"
1点、PostgreSQLについては公式イメージを使うように変更してみました。environmentという設定で環境変数の設定ができます。
ちなみにどうやってrunの際にデータベースのユーザやパスワードを変更しているかというと、Dockerfileの最後でENTRYPOINT命令にシェルスクリプトを指定し、その内部でデータベースの初期化を行っています。そこで環境変数を受け取って処理しているというわけです。
コンテナをまとめて処理
それでは、実際に起動してみましょう。その前に、前回のコンテナが起動中でしたらstopしておいてください(ポート番号が競合します)。
$ docker-compose up -d
初回はpostgresイメージをダウンロードするので時間がかかりますが、次回からは一瞬でコンテナたちが起動すると思います。
止める時は...
$ docker-compose stop
また、コンテナを削除するには...
$ docker-compose rm
stop+rmを同時にやる場合は
$ docker-compose down
簡単ですね!
おわりに
とりあえず個人的に勉強しておきたい部分はひとまず終わりです。
また機会があれば、いろんな開発環境のDockerfileやdocker-compose.yamlを作ってみたいです。