network(1.9.0版本)

network connect

你可以使用容器名称或者ID,将一个正在运行的容器介入网络。连接成功后容器酒可以与处于同一个网络中的容器通信。

docker network connect multi-host-network coantainer1

你也可以使用 docker run --net= 选项来启动一个容器直接连接到一个已知网络。

docker run -idt --net=multi-host-network busybox

你可以暂停,重启甚至终止已连接网络的容器。暂停容器将保持网络连接以及网络发现( by a network inspect)。终止容器,将使容器在该网络上消失,直到重启才可以被发现。当容器重启以后,容器重新加入该网络将不保证IP地址保持与原来一致。

使用 docker network inspect 命令来验证容器的网络是否已连接,而使用 docker network disconnect 来从网络上断开与容器的连接、

当容器连接到网络时,容器职能使用容器IP地址或者容器name来通信。对于overlay网络或者其它通过插件配置的跨主机环境的网络,然可以使用这种方式运行。

你可以使容器连接一个活多个网络,这些网络不要是相同类型的。例如:你可以连接一个容器网桥和overlay网络。

network create

该命令用于创建一个网络。使用 -d参数允许使用bridge或者overlay类型的网络构建与网络驱动中。如果你有第三种网络结构或者其它通用网络驱动,你也可以使用该参数特别说明。

如果不指定 --driver 参数,该命令将自动为你创建一个bridge类型的网络。该网络对应与传统的docker0网桥。当使用 docker run 启动一个容器时,它将自动连接到这个bridge网络。你不能删除这个默认的网络但是可以使用docker network create 命令创建一个新的:

docker network create -d bridge my-bridge-network

birdge网络是单docker引擎的隔离网络(Bridge networks are isolated networks on a single Engine installation)。如果你想创建一个跨越多个docker主机引擎的网络,你必须创建一个overlay类型的网络。与birdge网络不同,overlay网络创建需要提前准备一些配置:

1、需要连接一个 key-value 存储,目前支持Consul,Etcd以及Zookeeper(分布式存储)key-value 存储。

2、一个连接到 key-value 存储的云主机

3、每一台机器上的 docker deamon 都要配置相同参数

docker deamon 支持overlay选项的参数有:

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

想要了解更多有关配置以上参数的信息,请阅读 “Get started with multi-host network“

你可以安装 docker swarm 来管理集群建立自己的网络,这是一个不错的想法,但不是必须的。 Swarm提供先进的服务发现以及节点管理来帮助你实现。

当你准备好你的overlay网络时,你只需选择集群中的一个docker主机并执行以下命令:

docker network create -d overlay my-multihost-network

网络名称必须是唯一的,docker deamon 会尝试验证命名冲突,但并不保证(我就呵呵了)。用户有责任去避免命名冲突(呵呵呵。。。)。

connect containers

当你使用 --net 参数连接到一个网络时,这将会使目标容器连接到自定义网络中去:

docker run -idt --net=mynet busybox

如果你想在一个容器运行之后添加到一个网络中去,可以使用 docker network connect 命令。

你可以将多个容器连接到相同的网络中去。一旦连接,容器将只能通过IP或者容器名称进行通信。对于overlay网络或者其它通过插件配置的跨主机环境的网络,然可以使用这种方式运行。

使用 docker network disconnect 可以断开容器与网络的连接

Specifying advanced options

当创建一个网络时,docker Engine 会默认为该网络创建一个非重叠子网。这个子网并不是已存在子网的划分,它纯粹为了IP寻址(It is purely for ip-addressing purposes)。你可以覆盖这个默认的,然后使用 --subnet 选项来特别定义。在bridge网络上你可以这样定义:

docker network create -d --subnet=192.168.0.0/16

此外,你还可以指定 --gateway --ip-range 以及 --aux-addressoptions。

docker network create --driver=bridge  --subnet=172.28.0.0/16  --ip-range=172.28.5.0 --gateway=172.28.5.154

如果你省略了 --gateway 选项,docker Engine 将会从内置的 preferred pool 为你选择一个。

对于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 a=192.168.1.5 --aux-address b=192.168.1.6
--aux-address a=192.170.1.5 --aux-address b=192.170.1.6
my-multihost-newtork

但是确保你的子网不要重叠,否则,创建网络就会失败,Engine 将会反悔错误。

network disconnect

断开容器与网络的连接。

 docker network disconnect multi-host-network container1

network ls

列出deamon知道的所有的网络,包括跨多主机的集群网络。

 sudo docker network ls
NETWORK ID          NAME                DRIVER
7fca4eb8c647        bridge                 bridge
9f904ee27bf5        none                    null
cf03ee007fb4        host                      host
78b03ee04fc4        multi-host          overlay

使用 --no-trunc 选项来显示整个网络的ID

docker network ls --no-trunc
NETWORK ID                                                         NAME                DRIVER
18a2866682b85619a026c81b98a5e375bd33e1b0936a26cc497c283d27bae9b3   none                null                
c288470c46f6c8949c5f7e5099b5b7947b07eabe8d9a27d79a9cbf111adcbf47   host                host                
7b369448dccbf865d397c8d2be0cda7cf7edc6b0945f77d2529912ae917a0185   bridge              bridge              
95e74588f40db048e86320c6526440c504650a1ff3e9f7d60a497c4d2163e5bd   foo                 bridge    

network rm

删除一个网络,在删除该网络之前,必须断开与该网络连接的任何容器。

docker network rm my-network