docker network create用来创建一个新的网络。其中–driver可以指定bridge或内置网络驱动overlay。如果安装了第三方的或自己编写的网络驱动,也可以指定到这里。如果不指定–driver选项,这个命令将自动为你创建一个bridge网络。当安装docker engine时它自动创建了一个bridge网络。这个网络对应于Engine传统上依赖的docker0 bridge。当使用docker run启动一个容器时会自动连接到这个bridge网络。不可以删除这个默认的bridge网络,不过可以使用docker network create命令来创建一个新的。
bridge网络是在单台Engine安装上的隔离网络。如果想创建一个跨多个运行着Engine的docker主机,必须创建一个overlay网络。不像bridge网络,在创建overlay网络之前,需要一些预存在的条件。这些条件是:
dockerd支持overlay网络的选项是:
虽然不是必须的,但推荐安装docker swarm来管理组成你的网络的集群。Swarm提供了成熟的发现和服务器管理工具,可以帮助你更好地管理集群。
一旦满足了overlay网络的配置前提条件,只需要在集群中的任何一台主机执行创建网络命令:
网络名称必须是唯一的。docker daemon虽然会尝试识别名称冲突,但无法保证都会工作。避免名称冲突这个是用户的责任。
当运行一个容器时,使用–network标志来连接它到一个网络。下面的示例是把busybox容器添加到mynet网络:
如果想在容器已经在运行时把它添加到一个网络,使用docker network connect子命令。
可以连接多个容器到一个相同的网络。一旦连接成功,这些容器就可以使用另一个容器的IP地址或名称来互相通信。对于支持多主机连接的overlay网络或自定义插件,那些连接到相同的多主机网络但在不同的Engine启动的容器也能够以这种方式来互相通信。
可以使用docker network disconnect命令来从一个网络断开一个容器。
当创建一个网络时,Engine默认为这个网络创建一个不重叠的子网。这个子网不是现有网络的细分。 它纯粹是为了寻址目的。可以直接使用–subnet选项来覆盖这个默认行为并指定一个子网。在一个bridge网络上创建一个单独的子网:
除此之外,可以指定–gateway –ip-range和–aux-address选项。
如果没有指定–gateway,那么Engine将从首选的ip池中为你选择一个gateway。对于overlay网络和及类似功能的网络驱动,可以创建多个子网。
要确保子网没有重叠。如果重叠了,网络创建将失败,然后Engine返回一个错误。
当创建一个自定义的网络时,默认的网络驱动(如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地址:
默认下,当连接一个容器到一个overlay网络时,docker同时也连接到bridge网络来提供外部连接。如果想创建一个与外部隔离的overlay网络,可以指定–internal选项。