コンテナのネットワーク docker入門-7
Dockerには初期状態で3つのネットワークが用意されている
bridge: コンテナ生成時に特に指定がなければこのネットワークが使われる
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
次の記事