DamienKarrus’s blog

プログラミングとクライミングの足跡

コンテナのネットワーク docker入門-7

Dockerには初期状態で3つのネットワークが用意されている

  • bridge: コンテナ生成時に特に指定がなければこのネットワークが使われる

  • host: hostマシンのIPアドレス、portをそのまま使用する。IPマスカレードはできない

  • none: ネットワークは使用しない

bridgeだと各コンテナのIPアドレスでアクセスする必要がある。 コンテナのIPアドレスを知るには docker container inspect コンテナ名 で調べられるが、createする毎に変わってしまうためコンテナ間の通信で使用するには不便である。 新たにdockerネットワークを作れば自動的にDNSサーバが立ってコンテナ名称での名前解決ができる。
dockerネットワークを作る

$ docker network create mynet

または明示的に

$ docker network create mynet --subnet 10.0.0.0/16 --gateway 10.0.0.1

とする。 生成されたネットワーク情報を見るには

$ docker network inspect mynet

...(snip)...
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "10.0.0.0/16",
                    "Gateway": "10.0.0.1"
                }
            ]
        },
...(snip)...

コンテナ生成時にこのmynetを指定する

$ docker container run -dit --name web01 -p 8080:80 --net mynet httpd:2.4
$ docker container run -dit --name web02 -p 8081:80 --net mynet httpd:2.4

ネットワーク接続を確認する

$ docker network inspect mynet

...(snip)...
        "Containers": {
            "08556650cbe98c6cfb623287727a0e04acdf775b40e8fc4a8749e0f969c8891e": {
                "Name": "web02",
                "EndpointID": "3fcb4b7a7d66c8f82a44e934dcf0a82bef04a96f6532c375f744b408fa360b0a",
                "MacAddress": "02:42:0a:00:00:03",
                "IPv4Address": "10.0.0.3/16",
                "IPv6Address": ""
            },
            "7fe34aceb021dcd04c7152b4b18f753ad636f5e274bbe54dbd1cc3e5b3412358": {
                "Name": "web01",
                "EndpointID": "662f2aaf210518da003c0f7696f70dcbb13f568c221a54bc40f057638282dc50",
                "MacAddress": "02:42:0a:00:00:02",
                "IPv4Address": "10.0.0.2/16",
                "IPv6Address": ""
            }
        },
...(snip)...

コンテナからの接続を確認するため第3のコンテナを作る

$ docker container run -rm -it --net mynet ubuntu /bin/bash
# apt update
# apt -y upgrade
# apt install -y iproute2 iputils-ping curl
ping で相通確認
# ping -c 4 web01
80番ポートからレスポンス受信
# curl http://web01/
同様に
# ping -c 4 web02
# curl http://web02/

DNSの確認

# cat /etc/resolv.conf
search ap-northeast-1.compute.internal
nameserver 127.0.0.11
options edns0 ndots:0

nameserverが127.0.0.11に立っている

ネットワークを削除するには

$ docker network rm mynet

次の記事

damienkarrus.hatenablog.com