docker网络创建
描述 | 创建网络 |
---|---|
用法 | docker network create [OPTIONS] NETWORK |
描述
创建一个新的网络。接受或是内置网络驱动程序DRIVER
。如果您安装了第三方或您自己的自定义网络驱动程序,您也可以在此处指定。如果您不指定该
选项,该命令会自动为您创建网络。当您安装 Docker Engine 时,它会自动创建一个网络。该网络对应于Docker Engine 传统上依赖的桥梁。当您启动新容器时,它会自动连接到该桥接网络。您无法删除此默认桥接网络,但可以使用该命令创建新的桥接网络。bridge
overlay
DRIVER
--driver
bridge
bridge
docker0
docker run
network create
$ docker network create -d bridge my-bridge-network
桥接网络是单个 Docker 引擎安装上的隔离网络。如果要创建跨越多个运行 Docker 引擎的 Docker 主机的网络,则必须启用 Swarm 模式并创建overlay
网络。要了解有关 Swarm 模式的覆盖网络的更多信息,请参阅
“使用覆盖网络”。
启用 Swarm 模式后,您可以创建一个 Swarm 范围的覆盖网络:
$ docker network create --scope=swarm --attachable -d overlay my-multihost-network
默认情况下,群范围的网络不允许附加手动启动的容器。添加此限制是为了防止有权访问 swarm 集群中非管理节点的人员运行能够访问 swarm 服务网络堆栈的容器。
上面示例中使用的选项--attachable
禁用了此限制,并允许集群服务和手动启动的容器连接到覆盖网络。
网络名称必须是唯一的。 Docker 守护进程尝试识别命名冲突,但这并不能保证。用户有责任避免名称冲突。
覆盖网络限制
您应该使用/24
块(默认)创建覆盖网络,当您使用默认的基于 VIP 的端点模式创建网络时,这会将您限制为 256 个 IP 地址。此建议解决了
群体模式的限制。如果您需要超过 256 个 IP 地址,请勿增加 IP 块大小。您可以将dnsrr
端点模式与外部负载均衡器结合使用,也可以使用多个较小的覆盖网络。
有关不同端点模式的更多信息,请参阅
配置服务发现。
选项
选项 | 默认 | 描述 |
---|---|---|
--attachable | API 1.25+ 启用手动容器附加 | |
--aux-address | 网络驱动程序使用的辅助 IPv4 或 IPv6 地址 | |
--config-from | API 1.30+ 从中复制配置的网络 | |
--config-only | API 1.30+ 创建仅配置网络 | |
-d, --driver | bridge | 管理网络的驱动程序 |
--gateway | 主子网的 IPv4 或 IPv6 网关 | |
--ingress | API 1.29+ 创建群路由网状网络 | |
--internal | 限制外部网络访问 | |
--ip-range | 从子范围分配容器 IP | |
--ipam-driver | IP地址管理驱动程序 | |
--ipam-opt | 设置 IPAM 驱动程序特定选项 | |
--ipv6 | 启用 IPv6 网络 | |
--label | 在网络上设置元数据 | |
-o, --opt | 设置驱动程序特定选项 | |
--scope | API 1.30+ 控制网络范围 | |
--subnet | CIDR 格式的子网表示一个网段 |
例子
连接容器
当您启动容器时,使用该--network
标志将其连接到网络。此示例将busybox
容器添加到mynet
网络:
$ docker run -itd --network=mynet busybox
如果要在容器运行后将容器添加到网络,请使用docker network connect
子命令。
您可以将多个容器连接到同一网络。连接后,容器只能使用另一个容器的 IP 地址或名称进行通信。对于overlay
支持多主机连接的网络或自定义插件,连接到同一多主机网络但从不同守护进程启动的容器也可以通过这种方式进行通信。
您可以使用该命令断开容器与网络的连接docker network disconnect
。
指定高级选项
创建网络时,Docker Engine 默认为该网络创建一个不重叠的子网。该子网不是现有网络的细分。它纯粹是为了 IP 寻址的目的。您可以覆盖此默认值并直接使用该选项指定子网值--subnet
。在
bridge
网络上您只能创建一个子网:
$ 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
标志,Docker 引擎会从首选池中为您选择一个。对于overlay
网络和支持它的网络驱动程序插件,您可以创建多个子网。此示例使用两个/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
确保您的子网不重叠。如果这样做,网络创建失败并且 Docker 引擎返回错误。
桥接驱动程序选项
创建自定义网络时,默认网络驱动程序(即bridge
)具有可以传递的附加选项。以下是这些选项以及用于 docker0 网桥的等效 Docker 守护进程标志:
选项 | 相等的 | 描述 |
---|---|---|
com.docker.network.bridge.name | - | 创建 Linux 网桥时要使用的网桥名称 |
com.docker.network.bridge.enable_ip_masquerade | --ip-masq | 启用 IP 伪装 |
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
给任何网络驱动程序,同样,它们与用于 docker0 网桥的 Docker 守护进程标志大致相同:
争论 | 相等的 | 描述 |
---|---|---|
--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)
内部网络上的容器可以相互通信,但不能与任何其他网络通信,因为没有配置默认路由,并且设置了防火墙规则来丢弃所有进出其他网络的流量。可以与网关 IP 地址(以及适当配置的主机服务)进行通信,并且主机可以直接与任何容器 IP 进行通信。
默认情况下,当您将容器连接到overlay
网络时,Docker 还会将桥接网络连接到它以提供外部连接。如果要创建外部隔离overlay
网络,可以指定该
--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
在网络创建期间提升网络范围来实现此目的。然后,您将能够在创建服务时使用该网络。
$ docker network create -d bridge \
--scope swarm \
--attachable \
swarm-network
对于提供跨主机连接的网络驱动程序(例如 macvlan),如果需要特定于节点的配置来检测每个主机上的网络,您将通过仅配置网络提供该配置。当您创建 swarm 范围网络时,您将指定包含配置的网络的名称。
node1$ docker network create --config-only --subnet 192.168.100.0/24 --gateway 192.168.100.115 mv-config
node2$ docker network create --config-only --subnet 192.168.200.0/24 --gateway 192.168.200.202 mv-config
node1$ docker network create -d macvlan --scope swarm --config-from mv-config --attachable swarm-network