Docker CLI docker network create 常用命令

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍Docker CLI 中 docker network create 常用命令。

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

删除一个或多个网络

推荐阅读
cjavapy编程之路首页