リンク機能を使うと、コンテナのリンク元の情報を環境変数や/etc/hostsから取得出来るようになる。
データベースとWebアプリのコンテナをリンクさせた例を使ってリンクの細かい動きを確認する。
$ sudo docker run -d --name db training/postgres
$ sudo docker run -d -P --name web --link db:db training/webapp python app.py
上記のコンテナを走らせた状態でwebコンテナの/etc/hostsを覗いてみる.
$ docker exec web cat /etc/hosts
(省略)
172.17.0.23 db
dbコンテナに対応するエントリが存在。
dbコンテナを一度リスタートした後、/etc/hostsを再度確認する。
$ docker exec web cat /etc/hosts
(省略)
172.17.0.25 db
dbコンテナに対応するエントリは存在するがIPアドレスが変わっている。
コンテナはリスタートするだけでIPアドレスが変わってしまうが、
linkしている場合、リンク元のコンテナがリスタートしてIPアドレスが変更された場合、自動で/etc/hostsに反映してくれるらしい。
但し、dbコンテナを一度削除して同名の名前でコンテナを作成した場合は/etc/hostsに反映されることはない。
$ docker stop db
$ docker rm db
$ docker run -d --name db training/postgres
同名のコンテナのipアドレスを確認してみる。
$ docker inspect -f {{.NetworkSettings.IPAddress}} db
172.17.0.26
webコンテナ側の/etc/hostsは古いまま。
$ docker exec web cat /etc/hosts
(省略)
172.17.0.25 db
Linking Containers Together
https://docs.docker.com/userguide/dockerlinks/