🔥

Dockerのネットワーク

2023/07/27に公開

概要

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