2016/09/16
(更新日: 2016/09/16)
Dockerのコンテナ間を繋ぐLinksを使ってPHPとMySQLコンテナを連携させる
DockerはLinksというコンテナ間のネットワークを繋ぐ仕組みを持つ。 例えば、アプリケーションコンテナとデータベースコンテナを連携して使いたいときに有用だ。 今回はMySQLとPHPのコンテナを連携させる方法を紹介する。
MySQLコンテナの作成 まずは、mysqlコンテナを作成する。 バックグラウンドで起動させるための --detach
オプションと3306ポートを解放するための expose
オプションを指定している。
1 $ docker run --detach --expose =3306 --name =test-mysql --env ="MYSQL_ROOT_PASSWORD=mypassword" mysql
以下のようにコンテナが起動していることを確認できるはずだ。
1 2 3 ⇒ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b18a5159fe7c mysql "docker-entrypoint.sh" 1 minutes ago Up 1 minutes 3306 /tcp test-mysql
PHPコンテナの作成 次にPHPコンテナを作成する。 以下のDockerfileと確認用のconnect.phpを用意しておく。
Dockerfile
1 2 3 4 FROM php:7.1RUN apt-get updateRUN docker-php-ext-install pdo_mysql mbstringADD . /app
connect.php
1 2 3 4 5 6 7 8 9 10 11 12 13 <?php $dsn = 'mysql:host=' . $_ENV['MYSQL_PORT_3306_TCP_ADDR' ]; $user = 'root' ; $password = $_ENV['MYSQL_ENV_MYSQL_ROOT_PASSWORD' ]; $dbh = new PDO($dsn, $user, $password); $sql = "SELECT version();" ; foreach ($dbh->query($sql, PDO::FETCH_ASSOC) as $row) { print_r($row); }
ビルドする。
1 $ docker build -t mysql-php .
以下のように --link 連携したいコンテナ名:エイリアス名
でPHPコンテナを起動すると、起動したコンテナの環境変数に連携したいコンテナに関する情報が登録される。
1 2 3 4 5 6 7 8 9 10 11 $ docker run -it --link test-mysql:mysql mysql-php bash MYSQL_PORT_3306_TCP_PORT =3306MYSQL_PORT_3306_TCP =tcp://172.17.0.3:3306MYSQL_ENV_MYSQL_VERSION =5.7.15-1debian8MYSQL_NAME =/big_shirley/mysqlMYSQL_PORT_3306_TCP_PROTO =tcpMYSQL_PORT_3306_TCP_ADDR =172.17.0.3MYSQL_ENV_MYSQL_MAJOR =5.7MYSQL_PORT =tcp://172.17.0.3:3306
最後にPHPのコンテナでconnect.phpを実行して接続できることを確認してみる。 version名が表示されれば成功だ。
1 2 3 4 5 6 # php /app/connect.php => Array ( [version()] => 5.7 .15 )