このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Docker入門】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 |
bridge | Linuxブリッジ機能を使用したコンテナ接続 | docker run --network=bridge redis |
コンテナネットワークの操作コマンド
コンテナのネットワーク設定を管理するために、以下のような便利な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」で削除しておきます。