Dockerのコンテナ間接続

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
$

以上。

■ 関連

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください