使用Docker Stack部署微服务

前言:

 我们了解了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不是应用示例

  1.   首先准备好我们的项目
     
    这里我们主要部署ormis-admin(后台管理服务)和ormis-gateway(路由网关)
  2. 为两个服务准备各自的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 &"]

     

  3.    编写一个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. 我们准备了4台服务器用来部署微服务,1主3从

    将我们准备的配置文件上传到这4台服务器指定的位置,这里我们上传到/opt目录下
     1)在主机目录下需要上传的配置文件和网关服务jar包
          
           
     2)在3个从节点目录下需要上传的配置文件和网关服务jar包
         
  5. 上面的配置文件准备完毕,下面我们需要使用我们的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 .
            
           结束后查看镜像:
          
  6. 下面需要搭建docker-swarm集群,这个我之前已经搭建好了,可以通过docker node ls命令查看一下
  7. 好了,现在所有的东西都准备好了,下面我们可以在docker01主节点下通过docker-compose.yml文件来构建我们的微服务项目了

     命令:docker stack deploy -c docker-compose.yml 服务名
     
     查看docker stack是否创建成功
     
    查看服务信息:
  8. 查看主节点以及各个从节点的容器运行情况
     1)主节点
          
     2)从节点
         
  9. 通过浏览器访问项目
  10. 使用我们的Docker集群图形化显示工具 Visualizer看看我们容器的分布情况
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值