Docker の実験（その１４：ネットワークの概要）

[その１３：イメージの移設・ビルド（レイヤ）キャッシュ](https://qiita.com/intrajp/items/a26dc354d4167f4aba39)のつづき

最初の一歩：vm （Container Optimized-os）への入り方（zone は環境による）

```bash
$ gcloud auth login
$ gcloud compute ssh --project <project-id> --zone asia-northeast1-b <vm-name>
```

Docker で使用できるネットワークドライバには、以下がある。

bridge（デフォルト）
host
overlay
macvlan
none

```bash
$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
5e9118fc9ae3   bridge    bridge    local
b05adf15289a   host      host      local
d3ac94ee3669   none      null      local
```

Google Cloud の Container Optimized-os では、bridge, host, none が使えるようだ。

docker0 というネットワークアダプタがあるのを確認する。

```bash
$ ifconfig
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 101  bytes 16673 (16.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 106  bytes 520861 (508.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
```

これを見ると、172.17.0.0/16 ネットワークのようだ。

bridge ネットワークを確認して、subnet と Gateway を確認する。

```bash
$ docker inspect bridge
[
    {
        "Name": "bridge",
        "Id": "5e9118fc9ae3388d7311ad99eeec9140a5386381194d378941af2c39bbf8812f",
        "Created": "2023-02-18T12:13:31.170443126Z",
        "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": {
            "67df4d40228057e55850e67d3e9a3bff7ce51fc2a4bfcbefc6ba9b1dbd402942": {
                "Name": "mynginx",
                "EndpointID": "6595b6b7b116d05d442e73221424e520156427025452a46c32d32b4882799d42",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "8229282bc476d6394eee8ad64ff9e9a40a3c678f6fef1ab060c21824c61514a0": {
                "Name": "my_ubuntu",
                "EndpointID": "3e094e4ff87e80616c80d1c14798108bfc65ea52c76ed3a670867d1ea36d6633",
                "MacAddress": "02:42:ac:11:00:04",
                "IPv4Address": "172.17.0.4/16",
                "IPv6Address": ""
            },
            "e6e93cd9f5c5f5b3bc68e5e6fd068d5eb49585d53d46190249e8b141f1408664": {
                "Name": "mycustomnginx",
                "EndpointID": "065ba8c9c8c0157b60fec5af2a301f6d069c898a1e1ea8d1a48c71c17747c1bf",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            }
        },
        "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": "1460"
        },
        "Labels": {}
    }
]
```

Gateway が、172.17.0.1 になっていることが確認できる。

docker コンテナを作成する際に、上記ドライバを使ったネットワークを作成することができる。

host ネットワークを調査してみる。

```bash
$ docker network inspect host
[
    {
        "Name": "host",
        "Id": "b05adf15289a6f32483a6af3a9ca9fadd2e647548fd1d296bec9b91fe4f505dc",
        "Created": "2023-02-15T22:28:22.077515267Z",
        "Scope": "local",
        "Driver": "host",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": []
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
```

host ネットワークドライバを使って、コンテナをひとつ作ってみる。

```bash
$ docker container run -dt --name myhost --network host ubuntu
48f7a1225f89d78929ac1dc739fef12e674918cd3f236b1687a0cedd50a9800d
```

```bash
$ docker network inspect host
[
    {
        "Name": "host",
        "Id": "b05adf15289a6f32483a6af3a9ca9fadd2e647548fd1d296bec9b91fe4f505dc",
        "Created": "2023-02-15T22:28:22.077515267Z",
        "Scope": "local",
        "Driver": "host",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": []
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "48f7a1225f89d78929ac1dc739fef12e674918cd3f236b1687a0cedd50a9800d": {
                "Name": "myhost",
                "EndpointID": "bf92f4e61c4c4f3c7b2b3976f779eab236f273e4481b5a2e7ddb1af5496bae2a",
                "MacAddress": "",
                "IPv4Address": "",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
```

```bash
$ docker container exec -it myhost bash
# apt-get update && apt-get install net-tools
# ifconfig
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 101  bytes 16673 (16.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 106  bytes 520861 (520.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
```

IP アドレスを持っていないようだ。

なお、このように、ネットワークドライバを使い分けることにより、ユースケースに応じられるようだ。

[その１５：ブリッジネットワーク](https://qiita.com/intrajp/items/b03f6d41b08b7e1a1244)につづく。