その15:ブリッジネットワークのつづき。
最初の一歩
$ gcloud auth login
$ gcloud compute instances list
$ gcloud compute ssh --project <project-id> --zone asia-northeast1-b <vm-name>
次の一歩:コンテナへの入り方
$ docker ps
$ docker container exec -it <container id> bash
ネットワークの一歩:ネットワークの確認
$ docker network ls
次の一歩:調査
$ docker <リソース> inspect <対象>
ユーザー定義のブリッジネットワークを使うことにより、多くのコンテナの交通整理が出来るようになる。
また、名前解決が自動的にされるので、便利。
$ docker network ls
独自 bridge ネットワークを作ってみる。
$ docker network create --driver bridge mybridge
badee52eb7157f42ad9898d9252864b5a419ed18e852393142af271f33d30d1e
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
5e9118fc9ae3 bridge bridge local
b05adf15289a host host local
badee52eb715 mybridge bridge local
d3ac94ee3669 none null local
mybridge という bridge ドライバを使ったネットワークが作成できた。
この独自ネットワークを調査する。
$ docker network inspect mybridge
[
{
"Name": "mybridge",
"Id": "badee52eb7157f42ad9898d9252864b5a419ed18e852393142af271f33d30d1e",
"Created": "2023-02-21T20:14:10.364253221Z",
"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": {}
}
]
172.18.0.0/16 ネットワークとなっている。
ifconfig で確認すると、docker0 に加えて、mybridge のインターフェースが出来ている。
名前は、mybridge ではなくて、br-xxx となっている。
br-badee52eb715: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.18.0.1 netmask 255.255.0.0 broadcast 172.18.255.255
ether 02:42:4c:90:33:48 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1460
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:3dff:fe1f:f74d prefixlen 64 scopeid 0x20<link>
ether 02:42:3d:1f:f7:4d txqueuelen 0 (Ethernet)
RX packets 5046 bytes 284673 (278.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5377 bytes 53160182 (50.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
(以下略)
brctl show でみると、ネットワークインターフェースは、紐付けられていない。
brctl コマンドが Container Optimized-os の vm インスタンスにないので、toolbox コマンドを実行して、確認してみる。
$ toolbox
/# brctl show
bridge name bridge id STP enabled interfaces
br-badee52eb715 8000.02424c903348 no
docker0 8000.02423d1ff74d no veth48a4c4e
veth9636e80
vethc072a2f
vethdedb2be
vethf7d8ca0
/# exit
docker0 には interface が生まれているが、br-xxx には、interface が紐づいていない。
では、この、mybridge ネットワークに、コンテナを2つ立ち上げてみる。
$ docker container run -dt --name mybridge01 --network mybridge ubuntu
62478447a0966156b0a9307a17f869a0ffb32a79ecda60476aa2a4c7b7b12dff
$ docker container run -dt --name mybridge02 --network mybridge ubuntu
026c4cb1f367a71461780ac065050c0b0bdbf66c5cb4d3ec3fd379584ab363ae
brctl show で確認すると、今度は、インターフェースが紐づいているのが確認できる。
$ toolbox
/# brctl show
bridge name bridge id STP enabled interfaces
br-badee52eb715 8000.02424c903348 no veth11796c4
vethe53fb14
docker0 8000.02423d1ff74d no veth48a4c4e
veth9636e80
vethc072a2f
vethdedb2be
vethf7d8ca0
#exit
以下の調査コマンドでも確認してみる。
$ docker network inspect mybridge
[
{
"Name": "mybridge",
"Id": "badee52eb7157f42ad9898d9252864b5a419ed18e852393142af271f33d30d1e",
"Created": "2023-02-21T20:14:10.364253221Z",
"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": {
"026c4cb1f367a71461780ac065050c0b0bdbf66c5cb4d3ec3fd379584ab363ae": {
"Name": "mybridge02",
"EndpointID": "b7c598b42799dd48da3cd69a1473da71dd938ba22afbe6b3e31c24df8cb9548a",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
},
"62478447a0966156b0a9307a17f869a0ffb32a79ecda60476aa2a4c7b7b12dff": {
"Name": "mybridge01",
"EndpointID": "4f559c064c8729e0375a44d27245d5e2f852e8e9bd8a15b208444c0b281abf1c",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
確かに、172.18.0.0 ネットワークに、コンテナが 2つできている。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
026c4cb1f367 ubuntu "/bin/bash" 4 minutes ago Up 4 minutes mybridge02
62478447a096 ubuntu "/bin/bash" 4 minutes ago Up 4 minutes mybridge01
7777104893f7 ubuntu "/bin/bash" 21 hours ago Up 21 hours bridge02
339b2fc35742 ubuntu "/bin/bash" 21 hours ago Up 21 hours bridge01
48f7a1225f89 ubuntu "/bin/bash" 26 hours ago Up 26 hours myhost
8229282bc476 ubuntu "/bin/bash" 2 days ago Up 2 days my_ubuntu
e6e93cd9f5c5 5e4 "nginx -g 'daemon of…" 3 days ago Up 2 days 0.0.0.0:8082->80/tcp, :::8082->80/tcp mycustomnginx
67df4d402280 nginx "/docker-entrypoint.…" 5 days ago Up 3 days 0.0.0.0:8080->80/tcp, :::8080->80/tcp mynginx
1台目のコンテナに入ってみる。
$ docker container exec -it mybridge01 bash
/# apt-get update && apt-get install net-tools && apt get install iputils-ping -y
2台目のコンテナに ping して、ユーザー定義のネットワークブリッジでは、名前解決がされることを確認する。
/# ping mybridge02 -c 5
PING mybridge02 (172.18.0.3) 56(84) bytes of data.
64 bytes from mybridge02.mybridge (172.18.0.3): icmp_seq=1 ttl=64 time=0.067 ms
64 bytes from mybridge02.mybridge (172.18.0.3): icmp_seq=2 ttl=64 time=0.086 ms
64 bytes from mybridge02.mybridge (172.18.0.3): icmp_seq=3 ttl=64 time=0.096 ms
64 bytes from mybridge02.mybridge (172.18.0.3): icmp_seq=4 ttl=64 time=0.098 ms
64 bytes from mybridge02.mybridge (172.18.0.3): icmp_seq=5 ttl=64 time=0.089 ms
--- mybridge02 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4113ms
rtt min/avg/max/mdev = 0.067/0.087/0.098/0.011 ms
レガシーなリンクの方法(古い方法のため非推奨)
--link オプションを使用する。
作成方法(略)
確認方法(略)