Docker Swarm是一个原生的Docker集群管理工具。Swarm将一组Docker主机作为一个虚拟的Docker主机来管理。
实验环境:rhel7.3
swarm管理节点:server1 172.25.254.101
节点1:server2 172.25.254.102
节点2:server3 172.25.254.103
1.swarm管理节点初始化
[root@server1 ~]# docker swarm init
Swarm initialized: current node (fak2wocca1nlfca7r75slge0j) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-5vjk1xsmivnxtlxzrsaepo0dhn8avfbnlwh4mf53t7okxys6mb-8l1a8wjcnuy0sn2pdc7yckzng 172.25.254.101:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
2.将上方提示的命令分别在各个结点运行
[root@server2 ~]# docker swarm join --token SWMTKN-1-5vjk1xsmivnxtlxzrsaepo0dhn8avfbnlwh4mf53t7okxys6mb-8l1a8wjcnuy0sn2pdc7yckzng 172.25.254.101:2377
This node joined a swarm as a worker.
[root@server3 ~]# docker swarm join --token SWMTKN-1-5vjk1xsmivnxtlxzrsaepo0dhn8avfbnlwh4mf53t7okxys6mb-8l1a8wjcnuy0sn2pdc7yckzng 172.25.254.101:2377
This node joined a swarm as a worker.
3.查看swarm管理节点是否已将节点1、节点2添加成功
[root@server1 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
fak2wocca1nlfca7r75slge0j * server1 Ready Active Leader 18.06.1-ce
zjzcu3d5exhhkbmw6ksptr2wf server2 Ready Active 18.06.1-ce
v3r996yxqqyuxbken870qoki8 server3 Ready Active 18.06.1-ce
在集群中添加nginx服务,--replicas表示开启多少个任务,这里开启了3个nginx,那么3个nginx服务会平均分配到各个节点上,前提是每个节点都有nginx镜像。
[root@server1 ~]# docker service create --name web --publish 80:80 --replicas 3 nginx
可以使用docker cp index.html 容器ID:/usr/share/nginx/html来写入测试页面
测试:因为这里每个80端口都被映射到server1的80端口,所以会调度访问server1-server3
for i in {1..10}; do curl 172.25.254.101; done
查看web服务集群
[root@server1 ~]# docker service ps web
添加至6个运行nginx服务的容器
[root@server1 ~]# docker service scale web=6
[root@server1 ~]# docker service ps web
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
nc4pwi4j2xht web.1 nginx:latest server1 Running Running 16 minutes ago
vq3g6hlge2ie web.2 nginx:latest server2 Running Running 16 minutes ago
qh5hq7u0iv7u web.3 nginx:latest server3 Running Running 16 minutes ago
llhbqg8bt6r8 web.4 nginx:latest server2 Running Running 29 seconds ago
qb5l0g0o7q4w web.5 nginx:latest server3 Running Running 29 seconds ago
ht8vsmwn2zf3 web.6 nginx:latest server1 Running Running 29 seconds ago
可以分别给这6个nginx写入web测试页,然后访问,查看效果
监控swarm集群
这里用到的是visualizer,visualizer是官方的简单容器状态可视化工具
1.手工导入镜像(或者pull)
[root@server1 ~]# docker load -i visualizer.tar
2.
[root@server1 ~]# docker service create \
> --name=viz \
> --publish=8080:8080/tcp \
> --constraint=node.role==manager \
> --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
> dockersamples/visualizer
3.浏览器访问:172.25.254.101:8080 可以看到容器运行的效果,此时可以添加容器,删除容器,更新容器,都可以在浏览器中看到
[root@server1 ~]# docker service scale web=33 增加到33个容器
docker ps -aq|wc -l 此命令用于查看本节点下有多少个容器
docker service rm web 删除web集群
也可以使用自己创建的网络创建集群
docker network create -d overlay my_net1
docker service create --name web --network my_net1 --publish 80:80 --replicas 30 nginx
开启30个容器,平均分配到三个swarm节点上,也就是三个虚拟机上。
docker service update --image rhel7:v1 --update-delay 5s --update-parallelism 10 web
将容器集群更新为rhel7:v1 后面的参数表示每5秒更新10个