物理环境
3台可以两两相互通信主机A、B、C
软件环境
-
CentOS 7
-
Docker
网络拓扑信息
- A: 192.168.31.210
- B: 192.168.31.201
- C: 192.168.31.202
步骤
-
在主机A上配置网络信息管理数据库,即将A作为数据库节点,类似将主机A作为路由器(但比路由器简单,因容器IP不会动态改变,维护的路由表信息不会改变)。
启动一个consul容器,并映射服务到本地的8500端口,命令如下:
docker run -d -p "8500:8500" -h "consul" progrium/consul -server -bootstrap
-
创建网络(以主机B为例,主机C类似)
(1) 切换至root用户su
(2) 配置Docker服务的启动选项(每台主机都需配置)
vim /etc/default/docker #通常在此目录
在 /etc/default/docker中修改或添加以下内容:
DOCKER_OPTS="--cluster-store=consul://192.168.31.210:8500 --cluster-advertise=192.168.31.201:2376"
(3) 重启Docker服务
service docker restart
(4) 创建网络(在其中的一台主机上创建即可)
docker network create -d overlay multi
(5) 验证:查看网络具体信息
docker network inspect multi
-
启动容器测试网络
(1) 在主机A启动容器u1docker run -itd --name=u1 --net=multi daocloud.io/ubuntu:14.04
(2) 在主机B启动容器u2
docker run -itd --name=u2 --net=multi daocloud.io/ubuntu:14.04
(3)进入容器u1验证
docker exec -it u1 /bin/bash
进入容器后,查看ip地址,并使用ping命令测试是否与u2连通
ifconfig ping u2_ip # 将u2_ip替换为u2实际IP地址
(4)进入容器u2验证
docker exec -it u2 /bin/bash
进入容器后,查看ip地址,并使用ping命令测试是否与u1连通
ifconfig ping u1_ip # 将u1_ip替换为u1实际IP地址
结论
经测试,u1与u2在同一局域网下,其网关为步骤1中consul容器。至此,两台主机间网络搭建完成,并可推广至多台物理主机多个容器间的局域网搭建。
注意事项
- consul容器可以与应用容器在同一物理主机,本文为了避免混淆,将它们分开部署
- multi网络的网络号为10.0.0.0/24,即最多支持254个容器