以前、Dockerコンテナを連携させる方法を書いたが、コンテナ間の連携が必要な際はdocker-composeを使うと便利だ。
今回は前回と同じようにPHPとMySQLのコンテナを連携させるが、その連携にdocker-composeを使った方法を紹介する。
まずは、適当なディレクトリをつくる。
今回は docker-compose-sampleとする。
docker-compose-sample/ 配下にDockerfileを作成する。
1 | FROM shoyan/www-ci |
次に docker-compose.ymlを作成する。
1 | version: '2' |
servicesにwebとmysqlという名前でコンテナを定義している。
webコンテナ
webコンテナはDockerfileをbuildして、mysqlコンテナと連携させる定義をしている。
これによりwebコンテナからはmysqlという名前でmysqlコンテナにアクセスできるようになる。
mysqlコンテナについて
MySQLは公式のイメージを使っている。
他のコンテナからアクセスできるようにexposeで3306ポートを指定している。
公式のMySQLイメージから作成したコンテナは/docker-entrypoint-initdb.d/ 配下にあるシェルスクリプトやsqlファイルを起動時に実行するようになっている。
今回はデータベースとテーブルを作成するためにこの機構を利用する。
volumesを利用してファイルを配置している。
以下のdocker-compose-sample/docker-entrypoint-initdb.d/setup.sql を作成しておく。
1 | CREATE DATABASE IF NOT EXISTS app_test; |
確認用スクリプト
DBにアクセスできているかを確認するためのスクリプト connect.php を用意しておく。
1 |
|
docker-composeでコンテナを起動する
準備ができたのでdocker-composeコマンドでコンテナを起動する。
以下のようにネットワークとコンテナが作成される。-d オプションはバックグラウンドでコンテナを起動するために指定している。
1 | $ docker-compose up -d |
コンテナにログインしてみる。
1 | $ docker run --rm -it -v `pwd`:/app --net=dockercomposesample_default dockercomposesample_web bash |
確認用スクリプトで疎通を確認する。
バージョンとtableが表示されたら成功だ。
1 | root@6237502e4401:/app# php connect.php |
コンテナを削除するには docker-compose down コマンドを使う。
1 | ⇒ docker-compose down |
サンプルコードをgithubで公開しているので参考にしてほしい。
