一  要求: docker版本13以上;compose版本11以上;关闭防火墙和selinux

二  composev3版本加入了很多功能,现在我肯可以很方便的结合docker swarm 和compose来完成不同主机之间的通信问题

三 准别2台虚机,安装docker ,配置docker swarm 集群,截图如下:

docker <wbr>swarm <wbr>和compose部署服务,解决跨主机网路问题和ip不固定问题(一)

四   本次试验只是演示环境,用了同一个镜像文件,但是不影响试验效果

test1 主机compose文件配置如下

docker <wbr>swarm <wbr>和compose部署服务,解决跨主机网路问题和ip不固定问题(一)

注意内容:

1)networks: 在 compose file V3中, 允许我们通过networks关键字定义一个基于 Docker0 网络的 subnet。然后将我们的服务添加到这个subnet中。这样做的好处实现了服务之间的隔离,一旦我们不需要这组服务了,我们可以通过命令“docker-compose down” 卸载服务和对应的subnet,他不会对其他的服务造成影响。

 

docker-compose up -d 生成容器的同时,来看docker的网络变化

docker <wbr>swarm <wbr>和compose部署服务,解决跨主机网路问题和ip不固定问题(一)


test2 compse主机的配置文件如下

docker <wbr>swarm <wbr>和compose部署服务,解决跨主机网路问题和ip不固定问题(一)

注意内容:

1) 由于之前我们test1已经创建了网络,这里只需要指定external:true (不需要在创建了),在container里面加入即可

2)我们直接运行 docker-compose up -d 会报错,内容大致为找不到指定的网络,这是因为我们之前在test1上面创建的network不会自动在更新到test2 上面(官方说法),所以需要我们在test2上面运行一个container让其加入网络“ceshi_YuGuangWei”

 

在没有穿件容器之前,我们来看test2中容器的网络,并没有ceshi_YuGuangWei网络

docker <wbr>swarm <wbr>和compose部署服务,解决跨主机网路问题和ip不固定问题(一)

创建一个带ceshi_YuGuangWei网络的容器,再来查看容器的网络

docker <wbr>swarm <wbr>和compose部署服务,解决跨主机网路问题和ip不固定问题(一)


现在,再来执行compose文件就行了

docker <wbr>swarm <wbr>和compose部署服务,解决跨主机网路问题和ip不固定问题(一)

我们更改test2中 容器的nginx首页的代码给为yuguangwei 来访问以下

在 test1中mysql容器中访问

 

docker <wbr>swarm <wbr>和compose部署服务,解决跨主机网路问题和ip不固定问题(一)

可以看到访问成功

此种方法不仅可以解决容器之间跨主机网络的问题,也能忽略ip不固定的问题

 

compse.yml 文件补充解释

docker <wbr>swarm <wbr>和compose部署服务,解决跨主机网路问题和ip不固定问题(一)


false代表网桥不存在,启动容器时自动创建,true代表网桥存在,直接使用,启动容器是不创建