dockerでのコンテナ間の連携について
以前、dockerではCentOSのイメージからコンテナを作成し、その中にphp,apache,mysqlをインストールしてましたが、dockerの使い方としてはアプリとDB側で別々にコンテナを作成するのが一般的なようです。
以前勉強したリンク
元々の意図としては環境を平易に作成できるのがメリットなのと前者のような感じだとphpのバージョンをあげたり、mysqlのバージョンを上げる時に1つのイメージに対する依存度が上がり、vagrantを使うのと変わらないなあと思ってしまいます。(それでもvagrantよりは軽いのでいいと思いますが・・・)
今回ですが、下記の状態で作成しました。
- php5.6+apache
- mysql5.7
php5.6+apacheのDockerfile
1 2 3 4 |
FROM php:5.6-apache RUN apt-get update && \ docker-php-ext-install pdo_mysql mysqli mbstring RUN apt-get install zip unzip |
mysqlのDockerfile(下記ぐらいの内容だったら普通にpullすればいいかも・・・・)
1 |
FROM mysql:5.7 |
それぞれをビルドしてイメージを作った後、コンテナを立ち上げる時に下記のようなコマンドを打ちます。
1 2 3 |
#-dオプションは起動時にバックグランドで起動します。 #これを入れないとそのシェルがmysqlのプロセスを実行し、画面を使えなくなります。 docker run -it --name mysql -e MYSQL_ROOT_PASSWORD=pass -d mysql:5.7 |
phpと連携する場合、mysql側のコンテナを先に立ち上げておく必要があります。
またmysqlのコンテナを作成する場合は初期時にrootのパスワードがないと起動しないようですので、上記のようにコンテナ起動時に変数を渡す必要があります。
次にphp側のコンテナ起動ですが、下記のようになります。
1 |
docker run -it -p 8080:80 --name php56 --link mysql:mysql -d php:5.6-apache |
–linkですがこれが連携のオプションのようです。(mysql:mysqlはエイリアス?のようです)
連携が成功しているかどうかですがphp5.6側のコンテナに入って、/etc/hosts
ファイルを確認し、mysql側が名前解決されているかどうかを確認すればOKです。
参考リンク