一、基本简介
Docker Swarm Docker社区提供的唯一一个原生的支持Docker集群管理的工具。
Swarm可以把多个Docker主机组成的系统转化为单一的虚拟Docker主机,使容器可以组成跨主机的子网网络。
其中Docker Swarm中的节点分为管理端和工作端;任务是Swarm中最小的调度单位,为单一的调度容器;服务则是指一组任务的集合。

二 、配置swarm集群
2.1 基本配置
###在server1上设置管理端;并查看tocken和ip信息。
[root@server1 ~]# docker swarm init
###在需要加入的节点上运行相应的命令即可
[root@server2 ~]# docker swarm join --token SWMTKN-1-3p8anxoad8wyyqc3dk0wvj5a1n1cvou8x2dkz04enioz8gallv-cq646stkesv6krmpah8i1xuul 192.168.1.71:2377
###查看当前的swarm的管理端和节点端
[root@server1 ~]# docker node ls


2.2 更改管理节点
###更改管理节点
###提升server2为manager,将server1将为work
[root@server2 ~]# docker node promote server2
[root@server1 ~]# docker node demote server1
##离开swarm
[root@server1 ~]# docker swarm leave
[root@server2 /]# docker node rm server1
##启动1上的harbor
[root@server1 harbor]# docker-compose up -d
###指定server1 server2 的仓库
[root@server1 ~]# cd /etc/docker/
[root@server1 docker]# cat daemon.json
{
"registry-mirrors": ["https://reg.westos.org:443"]
}
[root@server1 docker]# scp daemon.json server2:/etc/docker/
[root@server1 docker]# scp daemon.json server3:/etc/docker/
###将harbor的证书给server3 和 server2
[root@server1 docker]# scp -r certs.d/ server2:/etc/docker/
[root@server1 docker]# scp -r certs.d/ server3:/etc/docker/
【说明】离开节点后,是自动离开集群,需要加入集群,需要重新执行join命令




2.3 服务配置
###根据node创建Nginx服务
[root@server2 docker]# docker service create --name=my_web --publish 80:80 --replicas 4 nginx
###查看所运行的服务
[root@server2 docker]# docker service ls
###查看服务的负载均衡
[root@server2 docker]# docker service ps my_web
##删除服务
[root@server2 docker]# docker service rm my_web

三、配置visualizer监控
###监控参考文档:https://gitee.com/yunwisdoms/docker-swarm-visualizer?_from=gitee_search
###运行监控(监控是在manager上运行的):visualizer
[root@server2 docker]# 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
###没有镜像时会自动下载
###运行容器,再次在网页查看
[root@server2 docker]# docker service create --name=my_web --publish 80:80 --replicas 4 nginx



四 、滚动更新
###服务滚动更新
[root@server2 docker]# docker service update --image nginx:1.18.0 --update-parallelism 2 --update-delay 5s my_web
##--image:更新的镜像 --update-parallelism 更新的数量 --update-delay 更新的时间间隔
### 服务回滚
[root@server2 docker]# docker service update --rollback my_web


五、 通过compose批量处理
使用docker stack,编写yml配置文件进行批量配置
###yml文件内容
version: "3.8"
services:
web:
image: myapp:v2
ports:
- "80:80"
networks:
- webnet
deploy:
replicas: 60
update_config:
parallelism: 20
delay: 5s
restart_policy:
condition: on-failure
visualizer:
image: visualizer:latest
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints:
- "node.role==manager"
networks:
webnet:
##通过stack直接部署
[root@server2 docker]# docker stack deploy -c docker-compose.yml my_web2
[root@server2 docker]# docker stack ps my_web2

六、图形化监视界面:portainer
###可视化图形界面:portainer
###官方文件:https://docs.portainer.io/v/ce-2.11/start/install/server/swarm/linux
###下载配置文件
[root@server2 portainer]# curl -L https://downloads.portainer.io/portainer-agent-stack.yml -o portainer-agent-stack.yml
###使用stack运行
[root@server2 portainer]# docker stack deploy -c portainer-agent-stack.yml portainer
