Linux入门教程:Docker命令行参考(29) – docker network create创建一个网络,其中driver可以


Usage:  docker network create [OPTIONS] NETWORK   Create a network   Options:       --aux-address value    Auxiliary IPv4 or IPv6 addresses used by Network                              driver (default map[])   -d, --driver string        Driver to manage the Network (default "bridge")       --gateway value        IPv4 or IPv6 Gateway for the master subnet (default [])       --help                 Print usage       --internal             Restrict external access to the network       --ip-range value       Allocate container ip from a sub-range (default [])       --ipam-driver string   IP Address Management Driver (default "default")       --ipam-opt value       Set IPAM driver specific options (default map[])       --ipv6                 Enable IPv6 networking       --label value          Set metadata on a network (default [])   -o, --opt value            Set driver specific options (default map[])       --subnet value         Subnet in CIDR format that represents a                              network segment (default [])

docker network create用来创建一个新的网络。其中–driver可以指定bridge或内置网络驱动overlay。如果安装了第三方的或自己编写的网络驱动,也可以指定到这里。如果不指定–driver选项,这个命令将自动为你创建一个bridge网络。当安装docker engine时它自动创建了一个bridge网络。这个网络对应于Engine传统上依赖的docker0 bridge。当使用docker run启动一个容器时会自动连接到这个bridge网络。不可以删除这个默认的bridge网络,不过可以使用docker network create命令来创建一个新的。

$ docker network create -d bridge my-bridge-network

bridge网络是在单台Engine安装上的隔离网络。如果想创建一个跨多个运行着Engine的docker主机,必须创建一个overlay网络。不像bridge网络,在创建overlay网络之前,需要一些预存在的条件。这些条件是:

一个能够访问的键值存储。Engine支持Consul, Etcd, 和ZooKeeper (分布式的存储)键值存储. 集群中的节点能够连接到这个键值存储。 在集群中的每台主机正确地配置Engine daemon。

dockerd支持overlay网络的选项是:

–cluster-store –cluster-store-opt –cluster-advertise

虽然不是必须的,但推荐安装docker swarm来管理组成你的网络的集群。Swarm提供了成熟的发现和服务器管理工具,可以帮助你更好地管理集群。
一旦满足了overlay网络的配置前提条件,只需要在集群中的任何一台主机执行创建网络命令:

$ docker network create -d overlay my-multihost-network

网络名称必须是唯一的。docker daemon虽然会尝试识别名称冲突,但无法保证都会工作。避免名称冲突这个是用户的责任。

连接容器

当运行一个容器时,使用–network标志来连接它到一个网络。下面的示例是把busybox容器添加到mynet网络:

$ docker run -itd --network=mynet busybox

如果想在容器已经在运行时把它添加到一个网络,使用docker network connect子命令。
可以连接多个容器到一个相同的网络。一旦连接成功,这些容器就可以使用另一个容器的IP地址或名称来互相通信。对于支持多主机连接的overlay网络或自定义插件,那些连接到相同的多主机网络但在不同的Engine启动的容器也能够以这种方式来互相通信。
可以使用docker network disconnect命令来从一个网络断开一个容器。

指定高级选项

当创建一个网络时,Engine默认为这个网络创建一个不重叠的子网。这个子网不是现有网络的细分。 它纯粹是为了寻址目的。可以直接使用–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,那么Engine将从首选的ip池中为你选择一个gateway。对于overlay网络和及类似功能的网络驱动,可以创建多个子网。

$ docker network create -d overlay \   --subnet=192.168.0.0/16 \   --subnet=192.170.0.0/16 \   --gateway=192.168.0.100 \   --gateway=192.170.0.100 \   --ip-range=192.168.1.0/24 \   --aux-address="my-router=192.168.1.5" --aux-address="my-switch=192.168.1.6" \   --aux-address="my-printer=192.170.1.5" --aux-address="my-nas=192.170.1.6" \   my-multihost-network

要确保子网没有重叠。如果重叠了,网络创建将失败,然后Engine返回一个错误。

bridge驱动选项

当创建一个自定义的网络时,默认的网络驱动(如bridge)可以传递额外的选项。下面是这些选项且有与docker daemon选项等同的选项:

选项 等同 描述
com.docker.network.bridge.name 创建Linux bridge使用的bridge名称
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

下面这些参数可以传递给docker network create,可以用于任何网络驱动。

参数 等同 描述
–gateway 主子网的IPv4或IPv6网关
–ip-range –fixed-cidr 从一个IP范围分配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

网络内部模式

默认下,当连接一个容器到一个overlay网络时,docker同时也连接到bridge网络来提供外部连接。如果想创建一个与外部隔离的overlay网络,可以指定–internal选项。

相关内容