使用Docker Stack部署微服务
前言: 我们了解了Docker使用Swarm集群部署方式,并创建服务到Swarm集群中;如果在集群部署过程中存在大量服务部署、编排那么该如何处理呢? 那么就需要了解Docker Stack了。1、Docker Stack是什么? Docker在进行多服务部署和管理时通常会使用Docker Stack来解决大规模部署管理问题,Docker引擎在1.12版本集成了Docker Swarm, 内置新的容
·
前言:
我们了解了Docker使用Swarm集群部署方式,并创建服务到Swarm集群中;如果在集群部署过程中存在大量服务部署、编排那么该如何处理呢?
那么就需要了解Docker Stack了。
1、Docker Stack是什么?
Docker在进行多服务部署和管理时通常会使用Docker Stack来解决大规模部署管理问题,Docker引擎在1.12 版本集成了Docker Swarm, 内置新的容器编排工具docker stack,通过提供期望状态、滚动升级、简单易用、扩缩容、健康检查等特性简化了应用的管理。
从体系结构上来讲,Stack 位于 Docker 应用层级的最顶端。Stack 基于服务进行构建,而服务又基于容器,如下图所示。
2、Docker Stack相关命令
命令比较简单且重点命令已经标记
命令 | 描述 |
docker stack deploy | 部署新stack或更新现有stack |
docker stack ls | 显示stack列表 |
docker stack ps | 列出stack中的任务 |
docker stack rm | 移除一个或多个stack |
docker stack services | 列出stack中的服务
|
3、使用Docker Stack不是应用示例
- 首先准备好我们的项目
这里我们主要部署ormis-admin(后台管理服务)和ormis-gateway(路由网关) - 为两个服务准备各自的Dockerfile
1)ormis-admin
#基于java8 FROM java:8 #创建一个目录存放jar包 RUN mkdir -p /opt/ormis/ormis-admin/config /opt/ormis/ormis-admin/logs #复制jar包以及相关配置文件 COPY ormis-admin-1.0-SNAPSHOT.jar /ormis-admin-1.0-SNAPSHOT.jar #添加进入docker容器后的目录 WORKDIR /opt/ormis/ormis-admin #配置项目端口 CMD ["--server.port=7001"] #对外暴露的端口号 EXPOSE 7001 #修改文件的创建修改时间 RUN bash -c 'touch /ormis-admin-1.0-SNAPSHOT.jar' #运行脚本,启动springboot项目 ENTRYPOINT ["java","-jar","/ormis-admin-1.0-SNAPSHOT.jar","-Dspring.config.location=/opt/ormis/ormis-admin/config/bootstrap.properties,/opt/ormis/ormis-admin/config/application.yml --logging.config=/opt/ormis/ormis-admin/config/log4j2-dev.xml > /opt/ormis/ormis-admin/logs/ormis-admin.log 2>&1 &"]
2)ormis-gateway#基于java8 FROM java:8 #创建一个目录存放jar包 RUN mkdir -p /opt/ormis/ormis-gateway/config /opt/ormis/ormis-gateway/logs #复制jar包以及相关配置文件 COPY ormis-gateway-1.0-SNAPSHOT.jar /ormis-gateway-1.0-SNAPSHOT.jar #添加进入docker容器后的目录 WORKDIR /opt/ormis/ormis-gateway #配置项目端口 CMD ["--server.port=8888"] #对外暴露的端口号 EXPOSE 8888 #修改文件的创建修改时间 RUN bash -c 'touch /ormis-gateway-1.0-SNAPSHOT.jar' #运行脚本,启动springboot项目 ENTRYPOINT ["java","-jar","/ormis-gateway-1.0-SNAPSHOT.jar","-Dspring.config.location=/opt/ormis/ormis-gateway/config/application.yml &"]
- 编写一个docker-compose.yml文件,用来构建我们要发布的两个服务,ormis-admin服务会发布到3个从节点上,ormis-gateway网关会发布在主节点上
version: "3.8" services: ormis-gateway: image: ormis-gateway:v1.0 #镜像名称 deploy: #Deploy是用来指定swarm服务部署和运行时的相关配置,并且只有使用docker stack deploy 部署swarm集群时才会生效,要使用deploy选项,compose-file中version版本要在3或3+ endpoint_mode: vip #Docker为swarm集群服务分配一个虚拟IP(VIP),作为客户端到达集群服务的“前端” restart_policy: #配置重启策略 condition: on-failure resources: #资源限制配置,服务限制使用不超过50M的内存和0.50(50%)的可用处理时间(CPU) limits: cpus: "0.5" memory: "1024M" replicas: 1 #可以指定该服务运行的容器数量 placement: #指定约束和偏好设置,这里指定该服务在manager节点启动 constraints: [node.role == manager] ports: - '8888:8888' environment: TZ: Asia/Shanghai volumes: - /opt/ormis/ormis-gateway/config:/opt/ormis/ormis-gateway/config networks: - ormis-network depends_on: - ormis-admin ormis-admin: image: ormis-admin:v1.0 # 镜像名称:版本 deploy: #DNS轮询(DNSRR)服务发现不使用单个虚拟IP。Docker为服务设置DNS条目,使得服务名称的DNS查询返回一个IP地址列表,并且客户端直接连接到其中的一个 endpoint_mode: dnsrr #这里一定要使用dnsrr,否则可能会导致网关无法路由到该服务 restart_policy: condition: on-failure resources: limits: cpus: "0.5" memory: "1024M" replicas: 3 #可以指定该服务运行的容器数量 placement: constraints: [node.role == worker] # ports: # - '7001:7001' # 容器端口与服务器端口的映射,使用了dnsrr就不能使用这个 environment: TZ: Asia/Shanghai volumes: #挂载数据卷,同步主机与容器的配置文件 - /opt/ormis/ormis-admin/config:/opt/ormis/ormis-admin/config - /opt/ormis/ormis-admin/logs:/opt/ormis/ormis-admin/logs networks: - ormis-network ports: - target: 7001 published: 7001 protocol: tcp mode: host visualizer: #配置Docker集群图形化显示工具 image: dockersamples/visualizer:stable ports: - "8080:8080" volumes: - "/var/run/docker.sock:/var/run/docker.sock" deploy: placement: constraints: [node.role == manager] networks: - ormis-network networks: ormis-network:
- 我们准备了4台服务器用来部署微服务,1主3从
将我们准备的配置文件上传到这4台服务器指定的位置,这里我们上传到/opt目录下
1)在主机目录下需要上传的配置文件和网关服务jar包
2)在3个从节点目录下需要上传的配置文件和网关服务jar包
- 上面的配置文件准备完毕,下面我们需要使用我们的Dockerfile在四台服务器上分别构建两个服务的镜像了
1)在主节点构建我们的网关服务镜像
a:首先进入到/opt/ormis/ormis-gateway目录下
b: 使用如下命令构建网关镜像
命令:docker build -f /opt/ormis/ormis-gateway/Dockerfile -t ormis-gateway:v1.0 .
查看构建好的镜像
2)在3个从节点下构建我们的ormis-admin服务的镜像,三个从节点操作都一样
a:首先进入到/opt/ormis/ormis-admin目录下
b: 使用如下命令构建网关镜像
命令: docker build -f /opt/ormis/ormis-admin/Dockerfile -t ormis-admin:v1.0 .
结束后查看镜像:
- 下面需要搭建docker-swarm集群,这个我之前已经搭建好了,可以通过docker node ls命令查看一下
- 好了,现在所有的东西都准备好了,下面我们可以在docker01主节点下通过docker-compose.yml文件来构建我们的微服务项目了
命令:docker stack deploy -c docker-compose.yml 服务名
查看docker stack是否创建成功
查看服务信息: - 查看主节点以及各个从节点的容器运行情况
1)主节点
2)从节点
- 通过浏览器访问项目
- 使用我们的Docker集群图形化显示工具 Visualizer看看我们容器的分布情况
更多推荐
已为社区贡献5条内容
所有评论(0)