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のコンテナ間リンクの簡単な説明でした。