0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Docker の実験(その16:ユーザー定義のブリッジネットワークとレガシーなリンクの方法)

Last updated at Posted at 2023-02-21

その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 オプションを使用する。

作成方法(略)
確認方法(略)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?