`

创建网络

阅读更多
    要自定义网络,可以使用“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 驱动接受下表所示的选项。
选项简写说明
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

    overlay 驱动也支持 --mtu 选项。
    下面这些参数可以传递给“docker network create”用于任意网络驱动。
选项简写说明
--internal-限制外界访问
--ipv6--ipv6允许 IPv6 网络

    下例使用“-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”来进行关联。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics