一.Docker Swarm集群的搭建部署
Docker Swarm集群的搭建
1、三个节点安装Docker并开启服务
配置好dockeryum源
下载安装docker
[root@server1 docker]# yum install docker-ce -y
[root@server1 ~]# systemctl start docker
##server2,server3类似
2、初始化集群
[root@server1 ~]# docker swarm init
在server1节点上查看桥接信息
在server1节点上查看docker的网络信息
3、server2,server3(worker节点)加入集群
[root@server2 ~]# docker swarm join \
> --token SWMTKN-1-36j2ld6xqyfjspr2c05i3qnutapuk4x89nha6w0nfbr1mg3krb3dc4aphv0jxu0wuivo2eviirk \
> 172.25.83.1:2377
[root@server3 ~]# docker swarm join \
--token SWMTKN-1-36j2ld6xqyfjspr2c05i3qnutapuk4x89nha6w0nfbr1mg3krb3dc4aphv0jxu0wuivo2eviirk \
> 172.25.83.1:2377
在server1(manager节点)查看节点信息
在server2节点上查看桥接信息
在server2节点上查看docker的网络信息
部署服务:
1、三个节点都要导入nginx镜像
[root@server1 ~]# docker load -i nginx.tar
[root@server2 ~]# docker load -i nginx.tar
[root@server3 ~]# docker load -i nginx.tar
2、在manager节点上部署Nginx容器
[root@server1 ~]# docker network create -d overlay my_net1 #创建驱动为overlay的网络
[root@server1 ~]# docker service create --name web \
> --network my_net1 \
> --replicas 3 \ #–replicas 3就是代表集群的个数变为3。manager会将容器平均分配到三个节点上
> -p 8080:80 \ #或-publish 8080:80或-publish=8080:80/tcp
> nginx #创建一个名称为web,副本为3,开放端口为80的nginx容器
查看docker服务列表
查看三台主机节点的nginx服务的默认发布页
3.三个节点都要操作:从容器中复制文件到主机nginx默认发布目录
[root@server1 ~]# vim index.html
server1
[root@server1 ~]# docker cp index.html 62455b51943c:/usr/share/nginx/html
server2,server3同上
4、在物理机上测试(负载均衡)
二、Docker Swarm集群安装Visualizer
Visualizer是一个图形化界面,显示Docker Swarm集群中各个节点状态、运行容器以及负载情况的监控工具。
Visualizer安装与部署
1.在server1上,导入visualizer镜像
[root@server1 ~]# docker load -i visualizer.tar
2.创建swarm的监控容器
[root@server1 ~]# docker service create --name viz \
> --publish=8888:8080/tcp \ #或者--publish 8888:8080 或者-p 8888:8080
> --constraint=node.role==manager \
> --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
> dockersamples/visualizer
查看运行viz的容器
3.测试:web页面去监控管理的集群每个容器的状态
当server3的docker服务关闭后,web从server3转移到别的节点(这里是server2)
[root@server1 ~]# docker service ps web
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
au4y4xv9gtkw web.1 nginx:latest server2 Ready Preparing 3 seconds ago
j9bafv99eccf web.2 nginx:latest server1 Running Running about an hour ago
smmgz35w8hzi web.3 nginx:latest server2 Running Running about an hour ago
当增加服务的数目时,Docker swarm集群会自动分配每个节点的web数目,并展示到监控界面
Docker Swarm集群的滚动更新(灰度更新)
1、导入要更新镜像
[root@server1 ~]# docker load -i httpd.tar
[root@server2 ~]# docker load -i httpd.tar
[root@server3 ~]# docker load -i httpd.tar
2、增加web服务数目为30(这步可做可不做。)
[root@server1 ~]# docker service scale web=30
滚动更新之前镜像是nginx:latest
3、设定每5秒更新一次,每次更新10个
[root@server1 ~]# docker service update --image httpd --update-delay 5s --update-parallelism 10 web
滚动更新之后镜像变成httpd:latest
三、docker portainer
1.导入portainer镜像
给manager端导入portainer和portainer-agent
给worker端导入portainer-agent
[root@server1 ~]# docker load -i portainer-agent.tar
[root@server1 ~]# docker load -i portainer.tar
输入命令docker stack deploy -c portainer-agent-stack.yml portainer
docker service create --name viz --publish=8888:8080/tcp --constraint=node.role==manager --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock dockersamples/visualizer
2.再浏览器上进行查看
输入用户名,输入两次密码进行注册
即可在图形化的页面对Docker Swarm集群进行操作
四、Docker Swarm集群的删除
1.删除创建的web服务和viz服务
[root@server1 ~]# docker service rm viz #在manager节点上删除创建好的viz服务。
[root@server1 ~]# docker service rm web #在manager节点上删除创建好的web服务。那么运行的容器也会相应的停止
[root@server1 ~]# docker ps #查看manager节点上运行的容器,发现之前运行的容器已经不存在了
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@server2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@server3 ~]# docker ps #查看node节点上(server3)上运行的容器,发现之前运行的容器已经不存在了
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2.各个节点离开集群(必须先是node节点离开集群,然后manager节点才能离开集群)
[root@server2 ~]# docker swarm leave #server2对应的node节点离开集群
[root@server3 ~]# docker swarm leave #server3对应的node节点离开集群
[root@server1 ~]# docker swarm leave --force #必须使用参数--force,强制离开集群,否则会报错
[root@server1 ~]# docker node ls #此时再次查看集群的节点,会报错。这是因为集群已经被删除了,该节点不再是manager节点,而只有manager节点才能查看集群的节点。
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.