一、前言
在前面一篇博文中,我们使用docker swarm+docker service实现了单应用的集群部署,那么在多应用的情况下,比如现在有100个应用,如何快速部署到多台服务器上呢,下面为你详细介绍
二、主要步骤
1.将镜像上传到自己的私有仓库中
2.在docker-compose.yml中编排服务
3.创建docker swarm集群
4.使用docker stack 集群化部署
5.使用docker service 动态扩容缩容
由于我没有创建私有仓库,因此第一步就略过,直接从第二步开始
三、开始实现多应用的集群部署
1.在docker-compose.yml文件中编排要部署的服务
我们需要同时部署5个web服务和1个nginx服务,docker-compose.yml文件内容如下
version: '3'
services:web:image: registrydeploy:replicas: 5resources:limits:cpus: "0.1"memory: 50Mupdate_config:parallelism: 2delay: 10srestart_policy:condition: on-failureports:- 5000depends_on:- nginxnginx:image: nginxports:- 80:80deploy:placement:constraints: [node.role == worker]
解释下上面的文件内容
version: '3' yml
文件版本为3版本
services
: 表示服务节点,所有要编排的服务都放在services节点下,上面我们编排了web服务和nginx服务
web 服务:
1.image: registry
表示基础镜像是registry
2.replicas: 5
表示要同时部署5个副本
3.update_config
更新策略
— parallelism: 2
表示同时更新2个
— delay: 10s
每次更新延迟10s
4.restart_policy
: 重启策略
— condition: on-failure
失败时重启
5.ports
: 对外暴露的端口
6.depends_on
: 要依赖的服务
nginx 服务:
constraints: [node.role == worker]
指定部署在worker节点
2.创建docker swarm集群
有如下主机:
docker01 192.168.130.171
docker02 192.168.130.167
在docker01主机中执行如下命令,初始化swarm集群,并指定docker01为manager节点
docker swarm init --advertise-addr 192.168.130.171
在docker02中执行得到的如下指令,作为worker节点加入到swarm集群中
docker swarm join --token SWMTKN-1-1ggq6sciczsd7vpedokozjfodl2atqinaz6tbceh29sf2bmvfm-3mmj3gsqcbkiqljbshntp8reg 192.168.130.171:2377
在docker01上执行docker node ls
命令, 如下结果表示集群创建成功
root@docker01:/home/ubuntu/app# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
s1ese4mjlqdxohpwj1g82cnwi * docker01 Ready Active Leader 19.03.7
zliejeuf0kj352fgtb69tzf7q docker02 Ready Active 19.03.11
3.使用docker stack 集群化部署
在docker01上执行docker stack deploy -c ./docker-compose.yml app
命令,同时部署web服务和nginx服务
上面的命令,-c 指定 docker-compose.yml文件路径,并指定名称为app
docker stack ls
查看执行结果
用docker service ls
查看服务情况,docker自动将app作为前缀加在服务的前台,得到名称分别为app_nginx和app_web的服务
docker stack ps app
查看服务的部署情况,发现nginx服务部署在docker02上面,web服务有5个副本,2个在docker01上,3个在docker02上
到这里我们就实现了多服务的集群化部署
4.使用docker service 动态扩容缩容
4.1动态扩容
执行docker service scale app_web=10
命令,将web服务扩容到10个
docker service ps app_web
查看扩容结果,发现web服务已经自动扩容到10个
4.2动态缩容
执行docker service scale app_web=3
命令,将web服务缩容到3个
docker service ps app_web
查看缩容结果,发现web服务已经自动缩容到3个
到此,基于docker多应用的集群部署,动态扩容缩容就全部结束了,欢迎留言交流