在前面的几篇文章中我们依次学习了dockerfile、docker-compose的使用,接下来是docker有一个比较
重要的使用,docker swarm的使用,与dockerfile和docker-compose相比较而言,docker swarm是在
多个服务器或主机上创建容器集群服务
准备
首先准备三台装好了docker的虚拟机:
dockerswarm1:192.168.47.251,作为manager节点
dockerswarm2:192.168.47.252,作为worker节点
dockerswarm3:192.168.47.253,作为worker节点
并且三台之间可以进行互相ping通。然后就可以开始启动docker swarm了,首先输入
docker node ls
返回结果:
表示没有swarm集群存在,且当前节点也不是管理节点。
那么我们就吧当前这个节点作为我们的管理节点,即192.168.47.251.
首先执行如下命令:
启动swarm
docker swarm init --advertise-addr 192.168.47.251
返回结果如图所示:
这里我们已经完成了manager的设置,从返回的提示都可以看出来,如果想要加入一个worker节点到当前的swarm,就执行如下命令:
docker swarm join --token SWMTKN-1-64211ybe5t29ia743mjc1q4vzw3hrsmlzqrbcrnr8djcwti0cw-asgkc27ezwlujmuudlv07txwj 192.168.47.251:2377
接着我们就在其他两个docker节点使用这个命令,加入到swarm集群中去:
如图所示,说明我们已经加入到swarm集群中去了:
然后我们在manager节点输入命令:
docker node ls
返回结果为如图所示:
使用docker swarm
接下来我们开始使用docker swarm,一般都是在manager上执行相关的docker swarm的命令,所以manger节点也是docker swarm的门户,基本上所有的命令都是从manager上执行的。
如图所示,是我在工作节点上执行命令的提示:
首先我们用docker拉取一个简单的镜像运行:
docker pull nginx:latest
接着创建一个私有网络,
docker network create -d overlay swarm_network
然后通过命令:
docker network ls
我们看到了我们创建的自定义网络:
接着我们就可以启动我们的nginx了
docker service create --replicas 1 --network swarm_network --name swarm_nginx -p 80:80 nginx:latest
如图所示,服务启动成功了:
此时我们设置的只有副本,所以检查的时候只有manager上有服务执行,现在我们进行扩容。
扩容swarm的服务
现在我们把副本扩容到了4个,经过manager的分配,我们发现在不同的节点上都有服务开始运行了。
dockerswarm1的manager上运行的服务:
在dockerswarm2上的worker上运行的服务:
在dockerswarm3上的worker上运行的服务:
docker service update --replicas 3 swarm_nginx
该命令也能达到和上面命令同样的效果
下线一个节点
docker node update --availability drain dockerswarm3
如图所示效果:
同时我们会发现刚刚在dockerswarm3上下线的服务,现在前部转移到了dockerswarm1和dockerswarm2上了:
激活一个下线中的服务
docker node update --availability active dockerswarm3
如图所示,已经激活了:
移除任务
把我们刚刚创建的swarm_nginx任务移除,如图所示:
执行命令:
docker service ps swarm_nginx
移除命令:
docker service rm swarm_nginx
删除节点
在对应的节点上执行如下命令:
docker swarm leave
当依次的把manager节点即,dockerswarm1删除时,整个集群就会自动删除。
docker swarm基本使用就这么多。后续我们会继续推出docker的比较理论化的东东。