1、docker network create 简介
docker network create
是用于创建 Docker 网络,以便容器之间可以进行通信和协作。Docker 已经提供了几种不同类型的网络,例如 bridge、host 和 overlay 等,可以根据需要选择合适的网络模式。
如果安装了第三方或自定义的网络驱动程序,也可以在此处指定。如果没有指定 --driver
选项,则该命令将自动创建一个桥接网络。
使用以下命令创建一个名为 my-bridge-network 的 bridge 网络:
docker network create -d bridge my-bridge-network
桥接网络是单个 Engine 安装上的隔离网络。如果要创建跨多个运行 Engine 的 Docker 主机的网络,则必须启用 Swarm 模式并创建覆盖网络。启用 Swarm 模式后,可以创建一个面向 Swarm 的覆盖网络:
docker network create --scope=swarm --attachable -d overlay my-multihost-network
默认情况下,面向 Swarm 的网络不允许手动启动的容器连接到其上。上面示例中的 --attachable 选项禁用了这个限制,允许同时支持 Swarm 服务和手动启动的容器连接到覆盖网络上。
需要注意的是,网络名称必须是唯一的。Docker 守护进程尝试识别命名冲突,但不能保证。用户有责任避免命名冲突。
对于使用默认 VIP-based endpoint-mode 创建的网络,应该使用 /24 块(默认值)创建覆盖网络,这将限制你最多只能创建 256 个 IP 地址。如果需要更多的 IP 地址,请不要增加 IP 块大小,可以使用带有外部负载均衡器的 dnsrr endpoint mode 或使用多个较小的覆盖网络。详情请阅读 Configure service discovery。
参考文档:https://docs.docker.com/engine/reference/commandline/network_create/
2、docker network create 语法
docker network create [OPTIONS] NETWORK
3、docker network create 命令
1)连接容器
连接容器在启动容器时,使用 --network 标志将其连接到网络。以下示例将 busybox 容器添加到 mynet 网络中:
docker run -itd --network=mynet busybox
如果要在容器已经运行后将容器添加到网络中,请使用 docker network connect
子命令。
可以将多个容器连接到同一个网络中。一旦连接,这些容器就可以使用另一个容器的 IP 地址或名称进行通信。对于支持多主机连接性的覆盖网络或自定义插件,连接到同一个多主机网络但从不同 Engine 启动的容器也可以以此方式进行通信。
可以使用 docker network disconnect
命令将容器从网络中断开。
2)指定高级选项
在创建网络时,Engine 默认为该网络创建一个不重叠的子网。该子网不是现有网络的细分,仅用于 IP 寻址。可以使用 --subnet
选项覆盖此默认值并直接指定子网值。在桥接网络上,只能创建一个子网:
docker network create --driver=bridge --subnet=192.168.0.0/16 br0
此外,还可以指定 --gateway
、--ip-range
和 --aux-address
选项。
docker network create \ --driver=bridge \ --subnet=172.28.0.0/16 \ --ip-range=172.28.5.0/24 \ --gateway=172.28.5.254 \ br0
如果省略 --gateway
标志,则 Engine 会从首选池内为您选择一个。对于覆盖网络和支持它的网络驱动程序插件,可以创建多个子网。以下示例使用两个 /25 子网掩码以遵循当前的指导原则,即不要在单个覆盖网络中拥有超过 256 个 IP 地址。每个子网都有 126 个可用地址。
docker network create -d overlay \ --subnet=192.168.10.0/25 \ --subnet=192.168.20.0/25 \ --gateway=192.168.10.100 \ --gateway=192.168.20.100 \ --aux-address="my-router=192.168.10.5" --aux-address="my-switch=192.168.10.6" \ --aux-address="my-printer=192.168.20.5" --aux-address="my-nas=192.168.20.6" \ my-multihost-network
请确保子网不重叠。如果重叠,则网络创建失败,Engine 返回错误。
3)桥接驱动程序选项
在创建自定义网络时,默认网络驱动程序(即 bridge)有其他可传递的选项。以下是这些选项及用于 docker0 桥接器的等效 docker 守护进程标记:
选项 | 等效 | 描述 |
com.docker.network.bridge.name | - | 创建 Linux 桥接器时要使用的桥名 |
com.docker.network.bridge.enable_ip_masquerade | --ip-masq | 启用 IP masquerading |
com.docker.network.bridge.enable_icc | --icc | 启用或禁用容器间互联 |
com.docker.network.bridge.host_binding_ipv4 | --ip | 绑定容器端口时的默认 IP |
com.docker.network.driver.mtu | --mtu | 设置容器网络 MTU |
com.docker.network.container_iface_prefix | - | 为容器接口设置自定义前缀 |
对于任何网络驱动程序,可以将以下参数传递给docker network create
,它们与docker daemon大致等价。
参数 | 等价 | 描述 |
--gateway | - | 主子网的 IPv4 或 IPv6 网关 |
--ip-range | --fixed-cidr | 从范围中分配 IP 地址 |
--internal | - | 限制对网络的外部访问 |
--ipv6 | --ipv6 | 启用 IPv6 网络 |
--subnet | --bip | 网络的子网 |
例如,让我们使用 -o
或 --opt
选项在发布端口时指定 IP 地址绑定:
docker network create \ -o "com.docker.network.bridge.host_binding_ipv4"="172.19.0.1" \ simple-network
网络内部模式 (--internal
)默认情况下,当您将容器连接到覆盖网络时,Docker 也会将桥接网络连接到其上以提供外部连通性。如果要创建一个外部隔离的覆盖网络,可以指定 --internal
选项。
网络入口模式 (--ingress
)可以创建用于在 swarm 集群中提供路由网格的网络。要这样做,请在创建网络时指定 --ingress
。一次只能创建一个入口网络。只有在没有服务依赖于它时才能删除网络。除了 --attachable
选项外,创建覆盖网络可用的任何选项在创建入口网络时也可用。
docker network create -d overlay \ --subnet=10.11.0.0/16 \ --ingress \ --opt com.docker.network.driver.mtu=9216 \ --opt encrypted=true \ my-ingress-network
在预定义的网络上运行服务您可以在预定义的 Docker 网络 bridge 和 host 上创建服务。
docker service create --name my-service \ --network host \ --replicas 2 \ busybox top
具有本地范围驱动程序的 Swarm 网络可以使用本地范围网络驱动程序创建 Swarm 网络。在创建网络时将网络范围升级为 swarm 即可。然后,将能够在创建服务时使用此网络。
docker network create -d bridge \ --scope swarm \ --attachable \ swarm-network
对于提供跨主机连通性的网络驱动程序(如 macvlan
),如果需要节点特定配置以便在每个主机上连接网络,则需要通过仅限于配置的网络提供该配置。当您创建 swarm 范围的网络时,然后将指定包含配置的网络的名称。
docker network create --config-only --subnet 192.168.100.0/24 --gateway 192.168.100.115 mv-config docker network create --config-only --subnet 192.168.200.0/24 --gateway 192.168.200.202 mv-config docker network create -d macvlan --scope swarm --config-from mv-config --attachable swarm-network
4、命令选项
选项 | 默认值 | 描述 |
--attachable | 启用手动容器附加 | |
--aux-address | Network 驱动程序使用的辅助 IPv4 或 IPv6 地址 | |
--config-from | 要从中复制配置的网络 | |
--config-only | 仅创建一个配置网络 | |
--driver, -d | bridge | 管理网络的驱动程序 |
--gateway | 主子网的 IPv4 或 IPv6 网关 | |
--ingress | 创建 Swarm 路由网格网络 | |
--internal | 限制对网络的外部访问 | |
--ip-range | 从子范围中分配容器 IP | |
--ipam-driver | IP 地址管理驱动程序 | |
--ipam-opt | 设置 IPAM 驱动程序特定选项 | |
--ipv6 | 启用 IPv6 网络 | |
--label | 在网络上设置元数据 | |
--opt, -o | 设置驱动程序特定选项 | |
--scope | 控制网络的范围 | |
--subnet | CIDR 格式的子网,代表一个网络段 |
5、子命令
命令 | 描述 |
docker network connect | 将容器连接到网络 |
docker network create | 创建一个网络 |
docker network disconnect | 断开容器与网络之间的连接 |
docker network inspect | 显示一个或多个网络的详细信息 |
docker network ls | 列出所有网络 |
docker network prune | 删除所有未使用的网络 |
docker network rm | 删除一个或多个网络 |