公众号「后端进阶」 专注后端技术分享!

Docker Stack多服务编排

2018-09-03
zch

之前 swarm 集群中docker service create一次只能部署一个微服务,我们可以使用 docker stack + compose 一次启动多个服务。

stack 是一组相互关联的服务,它是服务的上一层,这些服务共享依赖关系,并且可以一起编排和缩放。单个 stack 能够定义和协调整个应用程序的功能,简单来说 stack 就是一组服务的集合。

  • 编写 docker-compose.yml 文件:
version: "3"

services:
  go-gin-demo:
    image: chenghuizhang/go-gin-demo:v3
    ports:
      - 8081:8081
    networks:
      - overlay
    deploy:
      mode: replicated
      replicas: 2
  hello:
    image: chenghuizhang/helloword:0.0.2
    ports:
      - 8080:8080
    networks:
      - overlay
    deploy:
      mode: replicated
      replicas: 2

  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - 8090:8080
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
             
networks:
  overlay:

该 compose 文件制定部署 3 个服务,分别指定了服务的端口、服务实例个数、网络、镜像名称等等, 其中的 visualizer 服务提供一个可视化页面,我们可以从浏览器中很直观的查看集群中各个服务的运行节点。

  • 部署
$ docker stack deploy -c docker-compose.yml mynet

现在我们打开浏览器输入 任一节点 IP:8090 即可看到各节点运行状态。如下图所示:

visualizer

也可以在服务器里面查看服务运行情况:

$ docker stack ps mynet

docker compose

  • stack 相关命令:
deploy      Deploy a new stack or update an existing stack
ls          List stacks
ps          List the tasks in the stack
rm          Remove one or more stacks
services    List the services in the stack
  • 现在我们更新一下 docker-compose.yml 文件,增加 portainer 服务:
portainer:
    image: portainer/portainer
    ports:
      - "9000:9000"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      replicas: 1
      placement:
        constraints: [node.role == manager]
$ docker stack deploy -c docker-compose.yml mynet

打开页面:

docker stack

portainer 是 docker swarm 集群容器管理页面,可管理 Docker 容器、image、volume、network 等,当然我们还可以在其页面上添加多个stack:

docker stack


微信公众号「Java科代表」

下一篇 go modules详解

Content