🔥
Dockerのネットワーク
概要
Dockerではコンテナを接続するネットワークの機能があります
デフォルトで存在するネットワークもあれば、独自につくることも可能です
コンテナ起動時にネットワークを指定することができます
指定しない場合はデフォルトのネットワークに接続します
同じネットワークに存在するコンテナは、相互に通信が可能です
ネットワークの設定を一覧
docker network ls
デフォルトではこのとおり
コンテナ起動時にネットワークを指定しない場合、bridgeに接続される
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
1ea609cdd8ec bridge bridge local
e84e912f3d61 host host local
e28b157e5a61 none null local
ネットワークの詳細設定を確認する
docker network inspect <NETWORKNAME>
bridgeの詳細
$ docker network inspect bridge
[
{
"Name": "bridge",
"Id": "1ea609cdd8ec4475e8aef972d51f297c48b7761f2837dcca2e41580a9b9b2626",
"Created": "2023-07-26T10:25:52.972001423Z",
"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 <NETWORKNAME>
my-netという名前で作成
$ docker network create my-net
10523dc8c1cf78a26ff3c7b337389cdde5f901539a5b6aee1146ffa6d24be671
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
1ea609cdd8ec bridge bridge local
e84e912f3d61 host host local
10523dc8c1cf my-net bridge local
e28b157e5a61 none null local
ネットワークを削除する
docker network rm <NETWORKNAME>
接続中のコンテナが存在する場合は削除に失敗するため、接続中コンテナの削除が必要
ネットワークを指定してコンテナを起動する
--network
オプションでネットワークを指定する
docker container run --network <NETWORKNAME> <IMAGENAME>
my-netに接続するnginxを起動する
$ docker container run -itd --rm --network my-net nginx
ブリッジネットワーク内通信での名前解決
自ら作成したネットワークはサービスディスカバリに対応している
デフォルトのネットワークは未対応
これによってコンテナ名でIPアドレスを解決してくれる
こんなことが可能
$ ping <CONTAINERNAME>
Discussion