创建网络

要自定义网络,可以使用“docker network create”命令,默认创建的是 bridge 网络,该网络只能部署在一台主机上。我们也可以创建跨越多台主机的 overlay 网络,不过需要一些先决条件:
1、能访问键值存储区。Docker 支持 Consul、Etcd 和 ZooKeeper(分布式的)键值存储区。
2、能连接到键值存储区的主机群。
3、在群集中的每个主机上配置正确的引擎守护进程。
而支持 overlay 网络的 Docker 选项有:
1、--cluster-store
2、--cluster-store-opt
3、--cluster-advertise
Docker 默认会自动为创建的网路创建一个非重叠的子网,不过强烈推荐使用“--subnet”选项来明确指定一个子网。bridge 网络只能指定一个子网,而 overlay 网络可以指定多个。
除“--subnet”之外,还可以指定“--gateway”、“--ip-range”和“--aux-address”等多个选项。示例:

$ 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

创建自定义网络时,还可以传递额外的选项给底层驱动。bridge 驱动接受下表所示的选项。
[table]
|选项|简写|说明|
|com.docker.network.bridge.name|-|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|
[/table]
overlay 驱动也支持 --mtu 选项。
下面这些参数可以传递给“docker network create”用于任意网络驱动。
[table]
|选项|简写|说明|
|--internal|-|限制外界访问|
|--ipv6|--ipv6|允许 IPv6 网络|
[/table]
下例使用“-o”选项来指定了绑定端口时的 IP 地址:

$ docker network create -o "com.docker.network.bridge.host_binding_ipv4"="172.23.0.1" myNetwork

同一个自定义网络中的容器名可被自动解析成 IP 地址,但默认的 bridge 网络中却只能利用 IP 地址来进行互相通信,除非使用了“--link”选项。使用该选项添加了如下功能:
1、解析容器名为 IP。
2、使用“--link=containerName:alias”的形式可为要链接的容器定义别名。
3、安全的容器连接(通过“--icc=false”隔离)。
4、环境变量注入。
下面这个示例首先创建了一个连接到默认网络的容器 container1,然后再创建一个连接到相同网络的容器 container2,但使用“--link container1:c1”选项将其链接到了 container1,并为 container1 指定了别名 c1。然后再绑定到 container2 中使用 container1 的容器名与 container1 进行通信。

$ docker run -itd --name=container1 busybox
$ docker run -itd --name=container2 --link container1:c1 busybox
$ docker attach container2
# ping -w 3 c1
PING c1 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.090 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.151 ms
64 bytes from 172.17.0.2: seq=2 ttl=64 time=0.151 ms

--- c1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.090/0.130/0.151 ms
/ # ^p ^q # 退出 container2 终端
$

同理,如果要在 container1 中使用 container2 的容器名来与 container2 通信,同样需要使用“--link”来进行关联。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值