Docker网络

Docker在容器内部运行应用,这些应用之间的交互依赖于大量不同的网络,这意味着Docker需要强大的网络功能。

Docker 网络从覆盖范围可分为单个 host 上的容器网络和跨多个 host 的网络,单机意味着该网络只能在单个Docker主机上运行,并且只能与所在Docker主机上的容器进行连接。主要分为三种网络,none、host、bridge。

每个Docker主机都有一个默认的单机桥接网络。在Linux上网络名称为bridge,除非通过命令行创建容器时指定参数–network,否则默认情况下,新创建的容器都会连接到该网络。

Docker 安装时会自动在 host 上创建三个网络,使用docker network ls查看本机创建的docker网络

➜  first-network git:(1d4d04e9c) ✗ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
63f7ed247cf6        bridge              bridge              local
6a36000d75cc        host                host                local
31edf37a7261        none                null                local

可以通过docker network inspect查看某个网络具体描述

➜  ~ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "63f7ed247cf6bfbfb2bd811140ffa2136342a453079a486106328c000dcdb01f",
        "Created": "2019-12-13T09:14:25.797831625Z",
        "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": {}
    }
]

1.1 none 网络

none 网络就是什么都没有的网络。挂在这个网络下的容器除了 lo,没有其他任何网卡。容器创建时,可以通过 –network=none 指定使用 none 网络。

1.2 host 网络

连接到 host 网络的容器共享 Docker host 的网络栈,容器的网络配置与 host 完全一样。可以通过 –network=host 指定使用 host 网络。

1.3 bridge网络

在Linux Docker主机之上,默认的“bridge”网络被映射到内核中为“docker0”的Linux网桥。可以通过docker network inspect命令观察到上面的输出内容。

  "com.docker.network.bridge.name": "docker0",

在启动容器时,可以根据–network=bridge指定docker网络。

1.4 自定义网络

Docker 提供三种 user-defined 网络驱动:bridge, overlay 和 macvlan。overlay 和 macvlan 用于创建跨主机的网络,我们后面有章节单独讨论。

常用命令

Docker网络有自己的子命令,主要包括以下几种。

  • docker network ls用于列出运行在本地Docker主机上的全部网络。
  • docker network create创建新的Docker网络。默认情况下,在Windows上会采用NAT驱动,在Linux上会采用Bridge驱动。读者可以使用-d参数指定驱动(网络类型)。
  • docker network create -d overlay overnet会创建一个新的名为overnet的覆盖网络,其采用的驱动为Docker Overlay。
  • docker network inspect提供Docker网络的详细配置信息。
  • docker network prune删除Docker主机上全部未使用的网络。
  • docker network rm删除Docker主机上指定网络。

版权声明:本文为jiliguo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/jiliguo/p/12044491.html