Docker swarm
- 1.创建 Swarm 集群
- 2.部署swam监控
- 3.节点的降级升级
- 4.删除节点
- 5. 私有仓库的结合
- 6.滚动更新
- 滚动更新镜像版本
- 删除服务
- 7. 编写compose文件部署服务:stack 替换了compose
- 8.可视化容器管理工具 Portainer的结合
Docker Swarm是一个Dockerized化的分布式应用程序的本地集群,它是在Machine所提供的功能的基础上优化主机资源的利用率和容错服务。具体来说,Docker Swarm支持用户创建可运行Docker Daemon的主机资源池,然后在资源池中运行Docker容器。Docker Swarm可以管理工作负载并维护集群状态。
1.创建 Swarm 集群
初始化集群:
docker swarm init
执行上图提示,在其他docker节点上执行命令,节点作为一个worker会添加进swam
docker swarm join --token SWMTKN-1-4owwqn5j0u0k1bqxgozn3p1glcvmo7yl33w700xswc2293eiw0-dn40jytlvqqpw5zo5udbdgbzg 172.25.10.1:2377
查看swam 集群节点(server1 作为leader,)
docker node ls
2.部署swam监控
查看官方文档帮助
https://github.com/dockersamples/docker-swarm-visualizer
docker pull dockersamples/visualizer
docker tag dockersamples/visualizer:latest visualizer:latest
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.节点的降级升级
4.删除节点
5. 私有仓库的结合
1.加速文件(server2,3,4)
[root@server2 docker]# cat daemon.json
{
"registry-mirrors": ["https://reg.westos.org"]
}
2.拷贝证书
[root@server2 docker]# scp -r certs.d/ server4:/etc/docker/
3.每个节点有解析
[root@server2 docker]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.10.250 localhost.localdomain
172.25.10.1 server1 reg.westos.org
172.25.10.2 server2
172.25.10.3 server3
172.25.10.4 server4
127.0.1.1 server2
[root@server1 harbor]# ./install.sh --with-chartmuseum
使用server1中搭建的habor仓库
测试
在节点处就可以直接在私有仓库中拉取镜像,速度快
当有了私有仓库之后,部署速度提升
自动部署
发现问题:
自动拉取镜像的时候,tag是none
: 为了在仓库中更新(始终找最新版本)
6.滚动更新
节点扩容
[root@server2 ~]#
docker service scale my_web=10
滚动更新镜像版本
每个多长时间,每次几个,直到更新所有
docker service update --image myapp:v2 --update-parallelism 2 --update-delay 5s my_web
注释--image
指定要更新的镜像-update-parallelism
指定最大同步更新的任务数--update-delay
指定更新间隔
更新myapp镜像,每次两个,间隔5S,直至更新完所有
从仓库中找最新版本的镜像
删除服务
7. 编写compose文件部署服务:stack 替换了compose
https://docs.docker.com/compose/compose-file/compose-file-v3/ 官方文档查看帮助
将监控镜像也放在仓库中
[root@server2 compose]# pwd
/root/compose ###建立一个单独的compose目录
[root@server2 compose]# ls
docker-compose.yml
[root@server2 compose]# cat docker-compose.yml
version: '3.9'
services:
web:
image: myapp:v1 ##直接改镜像版本,可实现滚动更新
networks:
- mynet
deploy:
replicas: 2 ##负载个数
update_config:
parallelism: 2 #每次更新个数
delay: 10s #更新时间间隔
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:
mynet:
docker stack deploy -c docker-compose.yml my_cluster
部署 -c 指定compose文件 my_cluster名字
删除:docker stack rm my_cluster
8.可视化容器管理工具 Portainer的结合
将所需镜像放在habor仓库中
可以直接在github上下载
下载portainer-agent-stack.yml文件,修改
[root@server3 compose]# cat portainer-agent-stack.yml
version: '3.2'
services:
agent:
image: agent ####需要修改镜像的名字
environment:
# REQUIRED: Should be equal to the service name prefixed by "tasks." when
# deployed inside an overlay network
AGENT_CLUSTER_ADDR: tasks.agent
# AGENT_PORT: 9001
# LOG_LEVEL: debug
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
networks:
- agent_network
deploy:
mode: global
placement:
constraints: [node.platform.os == linux]
portainer:
image: portainer
command: -H tcp://tasks.agent:9001 --tlsskipverify
ports:
- "9000:9000"
volumes:
- portainer_data:/data
networks:
- agent_network
deploy:
mode: replicated
replicas: 1
placement:
constraints: [node.role == manager]
networks:
agent_network:
driver: overlay
attachable: true
volumes:
portainer_data:
待更新