Docker的原生网络支持非常有限,且没有跨主机的集群网络方案。目前实现Docker网络的开源方案有Weave、Kubernetes、Flannel、Pipework以及SocketPlane等

    简介:
    Weave是由Zett.io公司开发的,它能够创建一个虚拟网络,用于连接部署在多台主机上的Docker容器,这样容器就像被接入了同一个网络交换机,那些使用网络的应用程序不必去配置端口映射和链接等信息。外部设备能够访问Weave网络上的应用程序容器所提供的服务,同时已有的内部系统也能够暴露到应用程序容器上。Weave能够穿透防火墙并运行在部分连接的网络上,另外,Weave的通信支持加密,所以用户可以从一个不受信任的网络连接到主机。

    安装、启动:

    wget -O /usr/local/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave
    chmod a+x /usr/local/bin/weave
    weave launch(启动weave路由器,这个路由器其实也是以容器的形式运行的。)

    简单互联案例:

    两台阿里云服务器:均安装启动docker、均安装启动weave
    两台服务器分别启动应用容器test1、test2
    两台服务器分别要绑定的ip地址:
    A: 192.168.0.2/24
    B: 192.168.0.4/24

    绑定ip命令:
    weave attach 192.168.0.2/24 test1
    weave attach 192.168.0.4/24 test2
    进入容器验证是否绑定ip成功:
    docker exec -ti test1 /bin/bash
    [root@af7e09ef1cee /]# yum install -y net-tools
    [root@af7e09ef1cee /]# ifconfig
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 172.18.0.6 netmask 255.255.0.0 broadcast 0.0.0.0
    inet6 fe80::42:acff:fe12:6 prefixlen 64 scopeid 0x20<link>
    ether 02:42:ac:12:00:06 txqueuelen 0 (Ethernet)
    RX packets 7946 bytes 14422578 (13.7 MiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 5500 bytes 332728 (324.9 KiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
    `<br />ethwe: flags=4163 mtu 1376 <br /> inet 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255 <br /> inet6 fe80::2c0d:e2ff:fe2d:bdd2 prefixlen 64 scopeid 0x20 <br /> ether 2e:0d:e2:2d:bd:d2 txqueuelen 0 (Ethernet) <br /> RX packets 4 bytes 300 (300.0 B) <br /> RX errors 0 dropped 0 overruns 0 frame 0 <br /> TX packets 4 bytes 300 (300.0 B) <br /> TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 <br /> <br />lo: flags=73 mtu 65536 <br /> inet 127.0.0.1 netmask 255.0.0.0 <br /> inet6 ::1 prefixlen 128 scopeid 0x10 <br /> loop txqueuelen 1 (Local Loopback) <br /> RX packets 0 bytes 0 (0.0 B) <br /> RX errors 0 dropped 0 overruns 0 frame 0 <br /> TX packets 0 bytes 0 (0.0 B) <br /> TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 <br /> `

    默认情况下,两台宿主机上创建的2个容器间都是相互ping不通的。需要使用weave connect命令在两台weave的路由器之间建立连接。

    weave connect 59.110.169.84(对方宿主机ip地址) 运行此命令后,进入容器执行ping测试,容器互联成功

    [root@af7e09ef1cee /]# ping 192.168.0.4
    PING 192.168.0.4 (192.168.0.4) 56(84) bytes of data.
    64 bytes from 192.168.0.4: icmp_seq=1 ttl=64 time=62.8 ms
    64 bytes from 192.168.0.4: icmp_seq=2 ttl=64 time=2.62 ms
    64 bytes from 192.168.0.4: icmp_seq=3 ttl=64 time=2.27 ms
    64 bytes from 192.168.0.4: icmp_seq=4 ttl=64 time=2.39 ms
    64 bytes from 192.168.0.4: icmp_seq=5 ttl=64 time=2.27 ms
    64 bytes from 192.168.0.4: icmp_seq=6 ttl=64 time=2.32 ms
    64 bytes from 192.168.0.4: icmp_seq=7 ttl=64 time=2.36 ms
    64 bytes from 192.168.0.4: icmp_seq=8 ttl=64 time=2.39 ms