Docker 容器的网络

如果你通过 Docker 提供的用户指南,你应该已经完成了构建你的第一个 Docker 容器,并且运行了示例应用。

你已经构建了你自己的镜像(images)。本部分的内容将会指导你如何对你的容器进行网络配置。

使用默认网络来运行一个容器

Docker 能够支持通过 network drivers 来使用网络的容器。在默认的情况下,Docker 为你提供了 2 个网络驱动: bridge 和 overlay 驱动。

你也可以通过写一个网络驱动插件来创建你自己的网络驱动,但是这个属于比较高级的任务了。

在任何完成安装的 Docker 中将会自动包含有下面 3 个网络驱动,你可以通过下面的命令来列表出来:

$ docker network ls

NETWORK ID          NAME                DRIVER
18a2866682b8        none                null
c288470c46f6        host                host
7b369448dccb        bridge              bridge

被命名 bridge 的网络是一个特殊的网络。除非你在运行的时候指定一个网络,否则 Docker 容器将会一直运行这个网络。尝试运行下面的命令:

$ docker run -itd --name=networktest ubuntu

74695c9cea6d9810718fddadc01a727a5dd3ce6a69d09752239736c030599741

bridge1

通过检查网络,可以非常容易的找到你容器的 IP 地址。

$ docker network inspect bridge

[
    {
        "Name": "bridge",
        "Id": "f7ab26d71dbd6f557852c7156ae0574bbf62c42f539b50c8ebde0f728a253b6f",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.1/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Containers": {
            "3386a527aa08b37ea9232cbcace2d2458d49f44bb05a6b775fba7ddd40d8f92c": {
                "Name": "networktest",
                "EndpointID": "647c12443e91faf0fd508b6edfe59c30b642abb60dfab890b4bdccee38750bc1",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "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": "9001"
        },
        "Labels": {}
    }
]

通过断开与容器的链接,你也可以将容器从网络中删除。

如果要将容器从网络中删除的话,你需要同时提供网络名(network name)和容器名(container name)。

你也可以使用容器 ID,但是使用容器名相对使用容器 ID 来说,更加快速。

$ docker network disconnect bridge networktest

尽管你可以将容器从一个网络中断开连接,但是你不能删除 Docker 内部构建的被命名为 bridge 的 bridge 网络。

网络是将一个容器与其他容器独立开或者容器与其他网络独立开的最常规的方式。

因此,当你有更多使用 Docker 经验的时候,可以尝试创建你自己的网络。

https://www.ossez.com/t/docker/739

 

posted @ 2020-11-28 22:36  huyuchengus  阅读(107)  评论(0编辑  收藏  举报