🌟
【Docker】ブリッジネットワークの解像度を上げる試み
ブリッジネットワークを作成してコンテナを作ってみる
ホストの vagrant 資材は以下
docker インストール前のホストのインターフェースの状態(関係ない行省略)
# ip a
・・・
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet 10.0.2.15/24 metric 100 brd 10.0.2.255 scope global dynamic eth0
1: lo: ループバックのインターフェース(172.0.0.1)
2: eth0:ホストのデフォルトのインターフェース(10.0.2.15)
→デフォルトゲートウェイ(10.0.2.2)と接続されたインターフェース
docker インストール後のホストのインターフェースの状態(関係ない行省略)
# ip a
・・・
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet 10.0.2.15/24 metric 100 brd 10.0.2.255 scope global dynamic eth0
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
1: lo: ループバックのインターフェース(172.0.0.1)
2: eth0:ホストのデフォルトのインターフェース(10.0.2.15)
→デフォルトゲートウェイ(10.0.2.2)と接続されたインターフェース
3: docker0: Dockerインストール時に自動で作成されるデフォルトのブリッジネットワークのインターフェース(172.17.0.1)
docker network の確認
# docker network ls
NETWORK ID NAME DRIVER SCOPE
02d35875473c bridge bridge local
d307b9fd2ae5 host host local
fd54e5e2b1d5 none null local
# docker network inspect bridge
[
{
"Name": "bridge",
"Id": "02d35875473cb0840fa6297092de7e5f74f48a6f5cc582a661e60e1586140884",
"Created": "2024-03-24T06:58:28.758932241Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
test01 という名前で docker network を作成してみる
# docker network create test01
# docker network ls
NETWORK ID NAME DRIVER SCOPE
02d35875473c bridge bridge local
d307b9fd2ae5 host host local
fd54e5e2b1d5 none null local
f7cf72c3e457 test01 bridge local
# docker network inspect test01
[
{
"Name": "test01",
"Id": "f7cf72c3e457665f27a554f568498f6b6f591859547fc6e1aaaca88ae4ebc5be",
"Created": "2024-03-24T07:18:14.212178285Z",
"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)で test01 ブリッジネットワークが作成されたことを確認!!
また,test01 のインターフェースの IP アドレスとしては 172.18.0.1/32 が割り当たっている。
ここまでのネットワーク構成を図にすると以下
ホストのインターフェースの確認
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet 10.0.2.15/24 metric 100 brd 10.0.2.255 scope global dynamic eth0
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
6: br-f7cf72c3e457: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
inet 172.18.0.1/16 brd 172.18.255.255 scope global br-f7cf72c3e457
新しく仮想ブリッジのインターフェース「br-f7cf72c3e457」(172.18.0.1)が追加されている
コンテナを追加して変化を観察する
default と test01 それぞれにコンテナを1台起動してみる
# docker run -itd --name container-default --net default rockylinux:9.0
# docker run -itd --name container-test01 --net test01 rockylinux:9.0
# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
09cca641e9e0 rockylinux:9.0 "/bin/bash" 9 seconds ago Up 8 seconds container-test01
8b1ac4c7b576 rockylinux:9.0 "/bin/bash" 17 seconds ago Up 15 seconds container-default
インターフェースの状態を見てみる
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet 10.0.2.15/24 metric 100 brd 10.0.2.255 scope global dynamic eth0
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
6: br-f7cf72c3e457: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
inet 172.18.0.1/16 brd 172.18.255.255 scope global br-f7cf72c3e457
8: vethac7b57a@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
inet6 fe80::c0c8:86ff:fec3:8457/64 scope link
10: veth831df65@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-f7cf72c3e457 state UP group default
inet6 fe80::805a:5fff:feed:8664/64 scope link
ホストにインターフェースが2個追加されていることがわかる
- vethac7b57a@if7
- veth831df65@if9
これらは,ブリッジとコンテナを接続するためのブリッジ側のインターフェース!!!!
コンテナ側(内)のインターフェースを見てみる
#defaultのほうのコンテナ
# docker exec -it container-default bash
[root@8b1ac4c7b576 /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
7: eth0@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
inet6 fe80::42:acff:fe11:2/64 scope link
#test01のほうのコンテナ
# docker exec -it container-test01 bash
[root@09cca641e9e0 /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
9: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
inet6 fe80::42:acff:fe12:2/64 scope link
コンテナ内のインターフェースとして default のほうのコンテナは「172.17.0.2」で割り当たっている。
一方で test01 のほうのコンテナは「172.18.0.2」で割り当たっていることがわかる。
現在の状態を図示すると以下
default と test01 にコンテナをさらにもう1台ずつ起動してみる
それぞれでコンテナを起動
# docker run -itd --name container-default-2 --net default rockylinux:9.0
# docker run -itd --name container-test01-2 --net test01 rockylinux:9.0
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet 10.0.2.15/24 metric 100 brd 10.0.2.255 scope global dynamic eth0
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
6: br-f7cf72c3e457: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
inet 172.18.0.1/16 brd 172.18.255.255 scope global br-f7cf72c3e457
8: vethac7b57a@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
inet6 fe80::c0c8:86ff:fec3:8457/64 scope link
10: veth831df65@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-f7cf72c3e457 state UP group default
inet6 fe80::805a:5fff:feed:8664/64 scope link
12: vethe450b2d@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
inet6 fe80::c6:66ff:fe8e:2568/64 scope link
14: veth5f87de1@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-f7cf72c3e457 state UP group default
inet6 fe80::c449:7ff:fe6a:34ca/64 scope link
同様にインターフェースが追加されている
追加したコンテナ内でインターフェースの状態を確認してみる
#default のほうのコンテナ
# docker exec -it container-default-2 bash
[root@65eb13d19bab /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
11: eth0@if12: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
#test01のほうのコンテナ
# docker exec -it container-test01-2 bash
[root@6f809d05a209 /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
13: eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
inet 172.18.0.3/16 brd 172.18.255.255 scope global eth0
現在の状態を図示すると以下
Discussion