结果说明:通过 web ui 界面查看 consul 集群成员信息,如图所示表 1 定义的三个成员都已列出,图标为绿色表明节点健康,集群正常运行。
配置 swarm 集群1.在 Consul server leader 节点上运行
#docker run -d -p 2377:2375 swarm manage consul://192.168.116.111:8500/swarm
命令说明:主节点启动 swarm manage;参数"-p 2377:2375"表示将用于监听 docker 守护进程的端口 2375 映射到本机的 2377 端口(请确保 2377 端口未被使用);"swarm"是本地 Docker swarm 镜像;参数"manage"表示定义当前主机 consulsvr 为集群的主节点;参数"consul://192.168.116.111:8500/swarm"表示 consul 服务的地址。
2.在其他节点上分别运行
#docker run -d swarm join --advertise=192.168.116.112:2375 consul://192.168.116.111:8500/swarm
命令说明:将表 1 定义的主机 consul01 添加到新创建的 swarm 集群内;参数"-advertise"定义的是主机 consul01 对外的 IP 地址,其他参数说明同上。
#docker run -d swarm join --advertise=192.168.116.113:2375 consul://192.168.116.111:8500/swarm
3.验证配置 swarm 集群是否成功
#docker run --rm swarm list consul://192.168.116.111:8500/swarm
结果说明:查看所添加的成员 192.168.116.112 和 192.168.116.113 都集群内,唯一要特殊说明的是参数"rm"表示 Docker 在容器结束时自动清理其所产生的数据。因我们仅仅是为了检查 swarm 集群状态,对于短暂运行的容器可不保存数据。
通过本章,我们初步掌握了 consul 工具的使用方法,使得 Docker Swarm 集群的搭建又多了一个解决方案。那么如何实现不同主机间 Docker 容器的互通呢?第三方工具 pipework 可以帮我们实现这一需求,下一章将首先介绍 pipework 的工作原理。
pipework 工作原理pipework 是由 Docker 的工程师开发的一个 Docker 网络配置工具,由 200 多行 shell 实现,方便易用,本章将简要阐述其工作原理。
1.首先,使用 pipework 检查 Linux 系统是否存在网桥,若不存在,则创建以"br"开头的新网桥。
2.创建 veth pair 设备,实现 Docker 容器和网桥之间的连接。
3.使用 docker inspect 找到容器在主机中的 PID,然后通过 PID 创建容器网络命名空间的软连接。
4.将创建的 veth pair 设备分别加到 Docker 容器和网桥中。在容器中的名称默认为 eth1,可通过 pipework 的-i 参数修改该其名称。
5.最后配置新网卡 eth1 的 IP 和路由。这样容器通往外网的流量会经由新配置的 eth1 出去,而不是通过 eth0 和 docker0。
在了解了 pipework 如何工作后,我们通过实例来体现 pipework 在 Docker 容器网络配置上的作用。
通过实例实现 Docker 容器固定 IP 的分配本章通过实例演示如何在 CentOS 7 上使用pipework开源工具为 Docker 容器配置固定 IP 地址,从而实现不同主机之间的 Docker 容器互通,也能够满足部分用户通过容器的 IP 地址直接访问容器。
1.在表 1 定义的主机 consul01 节点上创建网桥
#vi /etc/sysconfig/network-scripts/ifcfg-br0
命令说明:编辑 CentOS 7 的网络配置文件,新网桥名字是"br0"。
1 2 3 4 5 6 7 8 9 10
TYPE="Bridge" BOOTPROTO="static" IPADDR="192.168.116.111" GATEWAY="192.168.116.1" PREFIX="24" NAME="br0" DEVICE="br0" ONBOOT="yes" DNS1="192.168.148.50" DOMAIN="cn.com"
2.设置原网卡桥接到新创建的网桥
#vi /etc/sysconfig/network-scripts/ifcfg-ens32
命令说明:文件 ifcfg-ens32 是 CentOS 7 的物理网卡配置文件,ens32 是网卡名字。
1 2 3 4 5 6 7 8 9 10
TYPE="Bridge" BOOTPROTO="static" IPADDR="192.168.116.111" GATEWAY="192.168.116.1" PREFIX="24" NAME="br0" DEVICE="br0" ONBOOT="yes" DNS1="192.168.148.50" DOMAIN="cn.com"
3.安装 pipework
#git clone https://github.com/jpetazzo/pipework
命令说明:从 github 上获取安装包
#cp ~/pipework/pipework /usr/local/bin/
命令说明:把 pipework 执行文件拷贝到/usr/local/bin 下,这个路径已经添加到系统环境变量中,便于用户在任何路径下都可直接执行 pipework 文件。
4.启动容器
#docker run -itd --name Ubuntu114 ubuntu /bin/bash
命令说明:创建一个新的 Docker 容器,名字是 ubuntu114,参数"-it"表示需要同容器进行数据交互,参数"/bin/bash"表示进行交互式操作的 shell 类型。
5.配置固定 IP 地址为 192.168.116.114
#pipework br0 ubuntu114 192.168.116.114/24@192.168.116.1