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<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<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