Dockerにおいて表題の通り。以前からであったのか、versionが上がって実装されたのか定かではないのだが、Dockerコンテナ間の接続が容易になったのでメモしておく。
■ 環境
- Docker 1.8.1
■ 以前の記憶
Dockerコンテナ間の接続を容易にするには、`dockeru run`時にオプションの`–link`が必要であったように記憶している。`–link`で指定したコンテナと名前を使用することができる。かつ、指定したコンテナが”EXPOSE“しているポート等を環境変数で取得することができる、といったことができた。そもそも記憶違いであったのかもしれないが…。
1.8.1にversionを上げてから気がついたのだが、コンテナ名でのアクセスが容易になっている。後から起動したコンテナでもアクセスできるようだ。
■ 1台目
CentOS6のコンテナを起動する。
$ docker run -ti --rm --name container1 centos:6 /bin/bash
[root@af3ff474df12 /]# cat /etc/hosts
172.17.0.217 af3ff474df12
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.217 container1.bridge
172.17.0.217 container1
[root@af3ff474df12 /]#
`/etc/hosts`に、コンテナIDだけでなく、コンテナ名でも記載がある。
■ 2台目
2台目のコンテナを起動する。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
af3ff474df12 centos:6 "/bin/bash" 11 hours ago Up 2 minutes container1
$
$ docker run -ti --rm --name container2 centos:6 /bin/bash
[root@736c06b32c57 /]# cat /etc/hosts
172.17.0.218 736c06b32c57
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.217 container1
172.17.0.218 container2.bridge
172.17.0.218 container2
172.17.0.217 container1.bridge
[root@736c06b32c57 /]#
`–name`オプションで指定したコンテナ名でIPと共に記載されている。このコンテナ内では”container1“も”container2“も名前解決ができることになる。
1台目のコンテナ(container1)も再度確認すると下記のようになっている。
[root@af3ff474df12 /]# cat /etc/hosts
172.17.0.217 af3ff474df12
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.217 container1.bridge
172.17.0.217 container1
172.17.0.218 container2
172.17.0.218 container2.bridge
[root@af3ff474df12 /]#
先程は記載されていなかった”container2“も追記されている。
名前解決をしたいということであれば、`–link`オプションを指定して起動する必要はないようである。
■ 3台目
ちなみに`–name`オプションでコンテナ名を指定しなくても追記される。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
736c06b32c57 centos:6 "/bin/bash" 4 minutes ago Up 4 minutes container2
af3ff474df12 centos:6 "/bin/bash" 11 hours ago Up 11 hours container1
$
$ docker run -ti --rm centos:6 /bin/bash
[root@4eae57e9ef12 /]# cat /etc/hosts
172.17.0.219 4eae57e9ef12
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.218 container2
172.17.0.219 serene_brahmagupta.bridge
172.17.0.217 container1.bridge
172.17.0.219 serene_brahmagupta
172.17.0.217 container1
172.17.0.218 container2.bridge
[root@4eae57e9ef12 /]#
1台目のhostsで確認する。
[root@af3ff474df12 /]# cat /etc/hosts
172.17.0.217 af3ff474df12
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.217 container1.bridge
172.17.0.217 container1
172.17.0.218 container2
172.17.0.218 container2.bridge
172.17.0.219 serene_brahmagupta
172.17.0.219 serene_brahmagupta.bridge
[root@af3ff474df12 /]#
また、コンテナ一覧でコンテナ名を確認する。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4eae57e9ef12 centos:6 "/bin/bash" About a minute ago Up 56 seconds serene_brahmagupta
736c06b32c57 centos:6 "/bin/bash" 6 minutes ago Up 6 minutes container2
af3ff474df12 centos:6 "/bin/bash" 11 hours ago Up 11 hours container1
$
以上。