このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Dockerネットワークのまとめ

 Dockerでは、コンテナ同士やコンテナとホストOS、外部ネットワークとの通信を管理するために、複数のネットワークオプションが提供されています。以下では、Dockerネットワークに関する重要な概念と、関連するコマンドについて解説します。

デフォルトネットワーク

 Dockerをインストールすると、3つのデフォルトネットワークが自動的に作成されます。これらのネットワークは、「docker network ls」コマンドを使用することで確認できます。以下はその例です。

PS C:\Users\joeac> docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
5c2516a7939b   bridge    bridge    local
9cb62d828092   host      host      local
1bafb53e8f6c   none      null      local

noneネットワーク

 noneネットワークは、実際には何も接続されていないネットワークであり、ネットワーク接続を必要としないコンテナを作成する場合に使用されます。例えば、以下のようにしてbusyboxコンテナを起動し、その中に入ってネットワークの状態を確認することができます。

PS C:\Users\joeac> docker run -it --network none busybox
/ # ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
/ # exit

hostネットワーク

 hostネットワークは、Dockerホストと同じネットワーク上にコンテナを配置するドライバです。これにより、コンテナはホストと同じネットワークインタフェースとIPアドレスを共有します。

bridgeネットワーク

 bridgeネットワークは、Linux上のブリッジ機能を利用して独自のネットワークを構築します。これは、Dockerホストが属するネットワークとは異なる仮想ブリッジ上のネットワークをコンテナに提供します。コンテナ作成時に「--net」オプションを指定しない場合、デフォルトでこのブリッジネットワークが選択されます。

以下に、Dockerネットワークを表でまとめます。

ネットワーク名機能使用例
noneネットワーク接続を必要としないコンテナdocker run --network=none busybox
hostホストと同じネットワークに接続するコンテナdocker run --network=host nginx
bridgeLinuxブリッジ機能を使用したコンテナ接続docker run --network=bridge redis
Dockerネットワーク

コンテナネットワークの操作コマンド

 コンテナのネットワーク設定を管理するために、以下のような便利なDockerコマンドが提供されています。

コマンド意味
docker network lsシステム上で利用可能なコンテナネットワークのリストを表示します。
docker network inspect指定したネットワークの詳細情報を表示します。
docker network create新しいコンテナネットワークを作成します。
docker network rmコンテナネットワークを削除します。
docker network connectコンテナを既存のネットワークに接続します。
docker network disconnectコンテナをネットワークから切断します。
コンテナとネットワークのコマンド

コマンドの使用例

 コンテナネットワークの操作コマンドの使い方について、使用例を例に、もう少し詳しく説明します。

docker network ls

 このコマンドを使用すると、現在のDockerシステムで利用可能なすべてのネットワークがリストされます。

PS C:\Users\joeac> docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
5c2516a7939b   bridge    bridge    local
9cb62d828092   host      host      local
1bafb53e8f6c   none      null      local
docker network inspect

このコマンドを使用して、特定のネットワークの詳細情報を取得できます。

PS C:\Users\joeac> docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "5c2516a7939b9de6cdfc40a0ec29f389458847a5399c4a95ac52ec53f31fe544",
        "Created": "2024-03-28T13:21:20.512357676Z",
        "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": {}
    }
]
docker network create

新しいネットワークを作成するために使用されます。

PS C:\Users\joeac> docker network create my-network
4acfb944108f014b4e236efc2c061958d2935d33bdcafabee2c6cb3cca29d036
PS C:\Users\joeac> docker network ls
NETWORK ID     NAME         DRIVER    SCOPE
5c2516a7939b   bridge       bridge    local
9cb62d828092   host         host      local
4acfb944108f   my-network   bridge    local
1bafb53e8f6c   none         null      local
docker network rm

不要なネットワークを削除するために使用されます。

PS C:\Users\joeac> docker network rm my-network
my-network
PS C:\Users\joeac> docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
5c2516a7939b   bridge    bridge    local
9cb62d828092   host      host      local
1bafb53e8f6c   none      null      local
docker network connect

既存のコンテナを新しいネットワークに接続します。

PS C:\Users\joeac> docker network create my-network
b7dc436c5f13a645c808151ce9fba90efa57efa33b4af6199e65143192e81045
PS C:\Users\joeac> docker network connect my-network my_container
docker network disconnect

コンテナを特定のネットワークから切断します。

PS C:\Users\joeac> docker network disconnect my-network my_container

 これらのコマンドを使用することで、Docker環境でのネットワークの管理を行い、コンテナの通信や接続を柔軟に制御することができます。

不要なDockerオブジェクトの削除

ここで、これまで作成してきたDockerオブジェクトをすべて削除しておきます。

以下のコマンドを実行します。

・「docker system prune -a」コマンドを実行します。

Are you sure you want to continue? [y/N] の質問には「y」と入力します。

PS C:\Users\joeac> docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y
Deleted Containers:
a19a6d03a1903d90fcde2543536ef8f53aae56d8554a0ff3f616332b5d5e63ae
c8da5f01f9795af490e47d7988e23b3c00a95570ddfa7391880cd9775c46b204
097182d1612c69cbed99966eaa44c9d0f5bb67cf88faadc3f2424d77fd0b29e6
3f9b9781dfbfcea62d315b42c7581bc22fab758a6b30fc99e74b1141a4d6b4c0

Deleted Networks:
my-network

Deleted Images:
untagged: busybox:latest
untagged: busybox@sha256:650fd573e056b679a5110a70aabeb01e26b76e545ec4b9c70a9523f2dfaf18c6
deleted: sha256:ba5dc23f65d4cc4a4535bce55cf9e63b068eb02946e3422d3587e8ce803b6aab
deleted: sha256:95c4a60383f7b6eb6f7b8e153a07cd6e896de0476763bef39d0f6cf3400624bd
untagged: nginx:latest
untagged: nginx@sha256:6db391d1c0cfb30588ba0bf72ea999404f2764febf0f1f196acd5867ac7efa7e
deleted: sha256:92b11f67642b62bbb98e7e49169c346b30e20cd3c1c034d31087e46924b9312e
deleted: sha256:d9e826dbb4b3c5770fe92638baa8c6614f210d782a5d021a123fe9fa1f92c23d
deleted: sha256:2a75285e888884bed4d630896c86ecd71739c6e82669e21ad7a050f33c9ac48d
deleted: sha256:32bfe3f040358ab8f9872a63d4ddefdc68f35d991ca10a812cbac5912ae9f97b
deleted: sha256:1330486eb62ea7e96f384961b77b0fc85f5d4422e761114ef3a72e7cb89751a4
deleted: sha256:a375372209a0f2b2c697a52cce46bc41b495bf86184ae83dd5146e20c22078eb
deleted: sha256:450787ca55caa59d0288de9cf36fc6b77d1b208a77eb837ec3d25b385f99cafb
deleted: sha256:a483da8ab3e941547542718cacd3258c6c705a63e94183c837c9bc44eb608999

Total reclaimed space: 191MB
PS C:\Users\joeac> docker network ls
NETWORK ID     NAME         DRIVER    SCOPE
5c2516a7939b   bridge       bridge    local
9cb62d828092   host         host      local
b7dc436c5f13   my-network   bridge    local
1bafb53e8f6c   none         null      local
PS C:\Users\joeac> docker network rm my-network

 「docker system prune -a」コマンドで「my-network」が削除されない場合は、「docker network rm my-network」で削除しておきます。