Dockerコンテナを構築するにあたり、一定のコンテナのグループ間で通信ができるようにしたい場合、任意のネットワークを作成し、通信する方法があります。
今回は「Docker Network」を利用したコンテナ間通信ができる環境を構築する手順をまとめました。
Dockerコンテナ間で任意のネットワーク通信ができる環境構築
今回は、任意のネットワークセグメント「test-network」を作成して、以下のようなコンテナ間通信ができる環境を構築します。
上記構成では、事前にCentOS8のイメージを取得済みとします。
また、今回の構築環境はWindows10で実施しています。
Dockerネットワークを新規作成する
以下コマンドでDockerネットワークを新規で作成します。
新規ネットワークとして「test-network」を作成します。
C:>docker network create test-network da2897f5839bb9285fa4b0712912da40e4694555f5dfcf0cf8d4dbeeb8861b5e
以下で「test-network」が作成されたことを確認できます。
C:>docker network ls NETWORK ID NAME DRIVER SCOPE 89d31715b0d3 bridge bridge local 024c63bc653d host host local b43271f6d28a none null local da2897f5839b test-network bridge local C:>
Dockerインストール時にはデフォルトで「bridge」というネットワークが作成されますが、DNS設定がされていないため名前解決ができません。
なので、新規でDockerネットワークを作成することにより、DNS設定がされ、名前解決をすることができ、コンテナ名を使用してコンテナ間通信ができるようになります。
以下は新規で作成されて「test-network」の詳細となります。
C:>docker network inspect test-network [ { "Name": "test-network", "Id": "da2897f5839bb9285fa4b0712912da40e4694555f5dfcf0cf8d4dbeeb8861b5e", "Created": "2020-04-07T11:15:07.052528877Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.18.0.0/16", "Gateway": "172.18.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": {}, "Labels": {} } ] C:>
新規で作成したネットワークを指定しコンテナを構築・起動する
上記で作成したDockerネットワークを使用して、CentOS8のコンテナを起動します。
Dockerネットワークを使用して起動する場合はコマンドオプションで「–network (network-name)」を使用します。
「CentOS8」コンテナ起動
C:>docker run -itd --privileged -p 2222:22 --name centos8 --network test-network centos:latest /sbin/init 147df6e80cb5479c8e0aa247869af057cad3f9ec5b9d7569d3c59019759344d5
「CentOS8-2」コンテナ起動
C:>docker run -itd --privileged -p 2223:22 --name centos8-2 --network test-network centos:latest /sbin/init 13736c657e7fc0b01818b3cef8750132785ac7b9f28464cf178cc5ad4e47a7aa
また、上記はポートSSHアクセスができるようにポート指定なども含めています。
詳細は以下のページを参照してください。
起動したコンテナ間での通信確認
上記で起動したコンテナで実際に通信ができるか確認します。
「CentOS8」コンテナにアクセスし、通信確認実施します。
C:>docker exec -it centos8 /bin/bash [root@147df6e80cb5 /]#
新規Dockerネットワークのセグメント「172.18.0.x」が割り当てられていることを確認
[root@147df6e80cb5 /]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000 link/ipip 0.0.0.0 brd 0.0.0.0 3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1000 link/tunnel6 :: brd :: 22: eth0@if23: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0 valid_lft forever preferred_lft forever [root@147df6e80cb5 /]#
「test-network」のデフォルトゲートウェイへの通信確認
[root@147df6e80cb5 /]# ping 172.18.0.1 PING 172.18.0.1 (172.18.0.1) 56(84) bytes of data. 64 bytes from 172.18.0.1: icmp_seq=1 ttl=64 time=0.079 ms 64 bytes from 172.18.0.1: icmp_seq=2 ttl=64 time=0.079 ms 64 bytes from 172.18.0.1: icmp_seq=3 ttl=64 time=0.079 ms 64 bytes from 172.18.0.1: icmp_seq=4 ttl=64 time=0.079 ms 64 bytes from 172.18.0.1: icmp_seq=5 ttl=64 time=0.079 ms 64 bytes from 172.18.0.1: icmp_seq=6 ttl=64 time=0.079 ms --- 172.18.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.079/0.079/0.079/0.000 ms
「CentOS8-2」宛の通信確認
[root@147df6e80cb5 /]# ping 172.18.0.3 PING 172.18.0.3 (172.18.0.3) 56(84) bytes of data. 64 bytes from 172.18.0.3: icmp_seq=1 ttl=64 time=0.117 ms 64 bytes from 172.18.0.3: icmp_seq=2 ttl=64 time=0.117 ms 64 bytes from 172.18.0.3: icmp_seq=3 ttl=64 time=0.117 ms 64 bytes from 172.18.0.3: icmp_seq=4 ttl=64 time=0.117 ms 64 bytes from 172.18.0.3: icmp_seq=5 ttl=64 time=0.117 ms 64 bytes from 172.18.0.3: icmp_seq=6 ttl=64 time=0.117 ms ^C --- 172.18.0.3 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.117/0.117/0.117/0.000 ms [root@147df6e80cb5 /]#
「CentOS8-2」コンテナにアクセスし、通信確認実施します。
C:>docker exec -it centos8-2 /bin/bash [root@13736c657e7f /]#
新規Dockerネットワークのセグメント「172.18.0.x」が割り当てられていることを確認
[root@13736c657e7f /]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000 link/ipip 0.0.0.0 brd 0.0.0.0 3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1000 link/tunnel6 :: brd :: 24: eth0@if25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.18.0.3/16 brd 172.18.255.255 scope global eth0 valid_lft forever preferred_lft forever [root@13736c657e7f /]#
「test-network」のデフォルトゲートウェイへの通信確認
[root@13736c657e7f /]# ping 172.18.0.1 PING 172.18.0.1 (172.18.0.1) 56(84) bytes of data. 64 bytes from 172.18.0.1: icmp_seq=1 ttl=64 time=0.118 ms 64 bytes from 172.18.0.1: icmp_seq=2 ttl=64 time=0.185 ms 64 bytes from 172.18.0.1: icmp_seq=3 ttl=64 time=0.185 ms 64 bytes from 172.18.0.1: icmp_seq=4 ttl=64 time=0.185 ms 64 bytes from 172.18.0.1: icmp_seq=5 ttl=64 time=0.185 ms 64 bytes from 172.18.0.1: icmp_seq=6 ttl=64 time=0.185 ms ^C --- 172.18.0.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 43ms rtt min/avg/max/mdev = 0.118/0.151/0.185/0.035 ms
「CentOS8」宛の通信確認
[root@13736c657e7f /]# ping 172.18.0.2 PING 172.18.0.2 (172.18.0.2) 56(84) bytes of data. 64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.118 ms 64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.205 ms 64 bytes from 172.18.0.2: icmp_seq=3 ttl=64 time=0.208 ms 64 bytes from 172.18.0.2: icmp_seq=4 ttl=64 time=0.208 ms 64 bytes from 172.18.0.2: icmp_seq=5 ttl=64 time=0.208 ms 64 bytes from 172.18.0.2: icmp_seq=6 ttl=64 time=0.208 ms ^C --- 172.18.0.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 76ms rtt min/avg/max/mdev = 0.118/0.177/0.208/0.041 ms [root@13736c657e7f /]#
作成したDockerネットワークにコンテナが追加されていることを確認
新規に作成した「test-network」に該当のコンテナが含まれていることを確認します。
C:>docker network inspect test-network [ { "Name": "test-network", "Id": "da2897f5839bb9285fa4b0712912da40e4694555f5dfcf0cf8d4dbeeb8861b5e", "Created": "2020-04-07T11:15:07.052528877Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.18.0.0/16", "Gateway": "172.18.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "13736c657e7fc0b01818b3cef8750132785ac7b9f28464cf178cc5ad4e47a7aa": { "Name": "centos8-2", "EndpointID": "2e051d9613caebe29a1e71bb13ae9dc8ce474a22b9626a5fa99a0e6a14eb6471", "MacAddress": "02:42:ac:12:00:03", "IPv4Address": "172.18.0.3/16", "IPv6Address": "" }, "147df6e80cb5479c8e0aa247869af057cad3f9ec5b9d7569d3c59019759344d5": { "Name": "centos8", "EndpointID": "54b392fd269a1f0187db96cff89c8dd57f411e132b4c4ba1aa3b60463397c2aa", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" } }, "Options": {}, "Labels": {} } ] C:>
Dockerネットワークを使用したコンテナ間通信は以上となります。
Dockerを構築するならVPSがおすすめです。
エンジニアのオンライン学習
ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。
おすすめオンライン教材 | |
自宅で学習ができるオンラインスクール | |
ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。
コメントを残す