Dockerの運用では、1プロセス1コンテナが基本ですが、複数コンテナを連携させるにはどうすればよいでしょうか?
例えば、WordPressを立ち上げるとすると、WordPress本体を動かすコンテナとMySQLなどのデータベースコンテナ、ApacheやNginxなどのWebサーバコンテナを別に用意する場合もあるでしょう。
WordPressでは、wp-config.php
にDBの接続情報を記述しますが、例えばhostの部分はデフォルトではlocalhost
になっています。
1
|
|
ここにMySQLコンテナのIPを記述したいわけですが、どうすればいいでしょうか?
docker inspect
などでIPアドレスを調べることができますが、そこで調べた値をハードコードしてしまってはDockerのimmutableなメリットが失われてしまいます。
そこで、--link
オプションによるコンテナ間リンクです。
MySQLコンテナがmysql
という名前で既に立ち上がっているとします。
これにリンクする形でWordPressコンテナを立ち上げてみましょう。
--link
オプションで、リンク先のコンテナ名とエイリアス名を指定するだけです。
(imageは、WordPress入りのものをPullしてもいいですし、Dockerfileを使うなどしてもいいですが、ここではとりあえずcentos6をベースに立ち上げます。WordPressは各自インストールしてください。)
1
|
|
--link mysql:db
で、あらかじめ立ち上げてあるmysql
というnameのコンテナをdb
というaliasでリンクしています。
これにより、立ち上がったコンテナの環境変数にmysqlコンテナの情報がセットされます。
env
を見てみるとちゃんとセットされていることが確認できます。
関連する項目を抜粋すると、以下の通り。
1 2 3 4 5 6 |
|
これらの環境変数を参照することで、MySQLコンテナのIPなどをプログラム上で使うことができます。
さらに、/etc/hosts
を見てみると…
1 2 3 4 5 6 7 8 |
|
こちらにも情報がセットされています!
これでWordPressのwp-config.php
の記述も簡単です。
1
|
|
これだけ!
以上、Dockerのコンテナ間リンクの簡単な説明でした。