[メモ]初心者がコンテナを触ってみる - (3)Dockerコンテナ・ネットワークの操作

# はじめに
お疲れ様です。yuki_inkです。
初心者がコンテナを触ってみるシリーズ3回目です。

[前回](https://qiita.com/yuki_ink/items/d3ba36c8cd64081c7af4)はDockerイメージを操作するコマンドを扱いました。
今回はDockerコンテナを操作するコマンドを扱います。

# やったこと
- Dockerコンテナのライフサイクル関連（生成・起動・停止・削除）
- Dockerネットワーク関連

### Dockerコンテナのライフサイクル関連

https://www.techpit.jp/courses/31/curriculums/32/sections/274/parts/926

この記事の通り！以上！（省エネ）
特に詰まったところもなし。

記事の中に貼ってあるこの画像は分かりやすかった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/4b308cb1-4994-4a2d-800f-211ee8ca35bd.png)


### Dockerネットワーク関連
Dockerには3種類のネットワークドライバが用意されている。
- bridge
- host
- none

それに紐づく形で、デフォルトで3つのネットワークが用意されている。
`docker network ls`コマンドで表示。
```
$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
706a948510db   bridge    bridge    local
180bff57838b   host      host      local
24188df29a51   none      null      local
```

それぞれのネットワークの概要は以下の記事が分かりやすかった。

https://qiita.com/TsutomuNakamura/items/ed046ee21caca4a2ffd9

`docker network inspect`コマンドでそれぞれのネットワークの詳細を見てみると面白かった。
まずはbridge。
IPレンジとして"172.17.0.0/16"が割り当てられた仮想ネットワークであることがわかる。
> Linux bridge 機能を使った、Linux 上に別ネットワークを使う方式。
Linux bridge で仮想インタフェースを作成し、そのインタフェースに対してveth でDocker コンテナと接続する方式で、Docker ホストが属するネットワークとは異なる、仮想bridge 上のネットワークにコンテナを作成し、NAT 形式で外部のノードと通信する形式です。
Docker のコンテナ作成時に`--net`オプションを特に何も指定しない場合は、自動的にこれが選択されたものとしてDocker は振る舞います。

```
$ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "706a948510db59c6d90f9cc0c76ba850f0289eed7883f48386117cb3ea7bdf5d",
        "Created": "2023-07-16T19:36:48.2796361+09:00",
        "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": {}
    }
]
```

続いてhost。
bridgeと違ってIPレンジを指定したりしておらず、あくまでホストのネットワーク設定に依存する。

> host ネットワークは、Docker ホストと同じネットワークにスタックするドライバで、Docker ホストマシンと同じネットワークインタフェース、IP アドレスを持つようになります。

```
$ docker network inspect host
[
    {
        "Name": "host",
        "Id": "180bff57838b5475edffe03f6af5722163ffac917f19b561c6ee6c4c9321b35e",
        "Created": "2023-06-17T16:22:57.476293321+09:00",
        "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": {}
    }
]
```

最後にnone。
書いてある内容はhostとほぼ変わらず、Driverの値だけ違う。
>none ネットワークはnull なネットワークドライバの実装です。
ネットワーク接続を必要としないコンテナを作成する場合に使用されます。

```
$ docker network inspect none
[
    {
        "Name": "none",
        "Id": "24188df29a518750d082a267cd419f7159c0c31a8da14c85ab81bad218fe181e",
        "Created": "2023-06-17T16:22:57.459513915+09:00",
        "Scope": "local",
        "Driver": "null",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": []
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
```

Dockerネットワーク操作系のコマンドは以下記事がまとめっていた。

https://www.tohoho-web.com/docker/docker_network.html

https://qiita.com/ksugawara61/items/de55810fc6c7b931563a


# 終わりに
今回はDockerコンテナ、ネットワーク周りのコマンドを扱いました。
次回は満を持してDockerfileを触ってみようかなと思います。