Docker容器技术:swarm集群里通过service部署wordpress

226 阅读2分钟

我正在参加「掘金·启航计划」

这里我们部署一个应用wordpress来继续学习,这里我们之前也基于docker run相关命令创建了mysql和wordpress两个容器,基于公共bridge进行通信

在集群里面service创建在哪个节点是不知道,那通信怎么进行呢?这里之前说过可以通过overlay方式让两个节点连在一个overlay上面以进行通信。

创建overlay-network

docker network create -d overlay demo

接着我们去worker1和worker2节点去看一下:

目前是看不到这个demo网络的。

创建mysql和wordpress节点

我们先创建一个mysql的service:

docker service create --name mysql --env MYSQL_ROOT_PASSWORD=root

--env MYSQL_DATABASE=wordpress --network demo --mount type=volume,source=mysql-data,destination=/var/lib/mysql 

mysql 

创建了两个环境变量,--mount是挂载存储地址用的,可以参考之前的-v。然后我们选择了demo网络:

这个service运行在manager节点上面。

然后创建第二个wordpress service:

做了一个内部80映射到外部80的操作,DBHOST就是mysql。创建之后看一下位置:

这个service运行在worker2上面

尝试访问wordpress

这个是worker2可以访问的地址,我们输入这个地址:

可以正常访问了,这里我们装一下,后面需要看看数据库能不能连接上!后面安装成功了,意味着可以连接。

这里如果我们尝试输入worker1的地址:

创建的network为啥其他节点看不到

最后我们之前创建的demo网络,虽然连接成功了,但是在work1和2节点上面输入docker network ls还是看不到,这是为什么呢?

而且当我们的wordpress部署在worker2之后,worker2就能看到这个网络了:

这个就是整个swarm内部处理的:当容器被分配到指定节点之后,为了保证网络同步,所以指定节点也会拥有该网络,跟之前依赖的分布式存储etcd的目的一样,只不过swarm底层机制完成了这些操作和通信,不需要再依赖了