当你开启更多路由器,这个 peer 成员列表会更长。当你新开一个路由器时,要指定前一个宿主机的 IP 地址,请注意不是第一个宿主机的 IP 地址(LCTT 译注:链状结构)。
现在你已经有了一个 weave 网络了,它由位于不同宿主机的 weave 路由器组成。
把不同宿主机上的容器互联起来接下来要做的就是在不同宿主机上开启 Docker 容器,并使用虚拟网络将它们互联起来。
假设我们创建一个私有网络 10.0.0.0/24 来互联 Docker 容器,并为这些容器随机分配 IP 地址。
如果你想新建一个能加入 weave 网络的容器,你就需要使用 weave 命令来创建,而不是 docker 命令。原因是 weave 命令内部会调用 docker 命令来新建容器然后为它设置网络。
下面的命令是在宿主机 hostA 上建立一个 Ubuntu 容器,然后将它放到 10.0.0.0/24 网络中,分配的 IP 地址为 10.0.0.1:
hostA:~$ sudo weave run 10.0.0.1/24-t -i ubuntu
成功运行后,终端会显示出容器的 ID 号。你可以使用这个 ID 来访问这个容器:
hostA:~$ docker attach <container-id>
在宿主机 hostB 上,也创建一个 Ubuntu 容器,IP 地址为 10.0.0.2:
hostB:~$ sudo weave run 10.0.0.2/24-t -i ubuntu
访问下这个容器的控制台:
hostB:~$ docker attach <container-id>
这两个容器能够互相 ping 通,你可以通过容器的控制台检查一下。
如果你检查一下每个容器的网络配置,你会发现有一块名为“ethwe”的网卡,你分配给容器的 IP 地址出现在它们那里(比如这里分别是 10.0.0.1 和 10.0.0.2)。
Weave 的其他高级用法weave 提供了一些非常巧妙的特性,我在这里作下简单的介绍。
应用分离使用 weave,你可以创建多个虚拟网络,并为每个网络设置不同的应用。比如你可以为一群容器创建 10.0.0.0/24 网络,为另一群容器创建 10.10.0.0/24 网络,weave 会自动帮你维护这些网络,并将这两个网络互相隔离。另外,你可以灵活地将一个容器从一个网络移到另一个网络而不需要重启容器。举个例子:
首先开启一个容器,运行在 10.0.0.0/24 网络上:
$ sudo weave run 10.0.0.2/24-t -i ubuntu
然后让它脱离这个网络:
$ sudo weave detach 10.0.0.2/24<container-id>
最后将它加入到 10.10.0.0/24 网络中:
$ sudo weave attach 10.10.0.2/24<container-id>
现在这个容器可以与 10.10.0.0/24 网络上的其它容器进行通信了。这在当你创建一个容器��网络信息还不确定时就很有帮助了。
将 weave 网络与宿主机网络整合起来有时候你想让虚拟网络中的容器能访问物理主机的网络。或者相反,宿主机需要访问容器。为满足这个功能,weave 允许虚拟网络与宿主机网络整合。
举个例子,在宿主机 hostA 上一个容器运行在 10.0.0.0/24 中,运行使用下面的命令:
hostA:~$ sudo weave expose 10.0.0.100/24
这个命令把 IP 地址 10.0.0.100 分配给宿主机 hostA,这样一来宿主机 hostA 也连到了 10.0.0.0/24 网络上了。显然,你在为宿主机选择 IP 地址的时候,需要选一个没有被其他容器使用的地址。
现在 hostA 就可以访问 10.0.0.0/24 上的所有容器了,不管这些容器是否位于 hostA 上。好巧妙的设定啊,32 个赞!
总结