This website requires JavaScript.

Docker Stack 部署博客站点

by  admin  

镜像准备

Docker Stack 不支持 “build” 编排指令,所以需要将镜像预先准备好。此处使用阿里云的容器镜像服务,将本地构建好的镜像推送至阿里云镜像仓库:

$ docker login --username=brusw@outlook.com registry.cn-hangzhou.aliyuncs.com

$ docker tag brusw/sample:latest registry.cn-hangzhou.aliyuncs.com/brusw/sample:latest

$ docker push registry.cn-hangzhou.aliyuncs.com/brusw/sample:latest

服务部署

创建编排文件

博客站点一共包含 3 个服务:koa(服务端)、nuxt(展示前端)、admin(管理后台),数据库使用 MySQL(容器服务,未作集群部署)。参考 Docker Compose v3 语法,创建一个 docker-stack.yml 文件,内容如下:

version: "3.7"
services:

  koa:
    image: registry.cn-hangzhou.aliyuncs.com/brusw/blog-koa
    ports:
      - "3000:3000"
    networks:
      - frontend
      - backend
    volumes:
      - /srv/www/blog/config:/usr/src/app/config
    deploy:
      replicas: 2
      resources:
        limits:
          memory: 100M
      restart_policy:
        condition: on-failure
      update_config:
        order: start-first
      placement:
        constraints: [node.role==worker]

  nuxt:
    image: registry.cn-hangzhou.aliyuncs.com/brusw/blog-nuxt
    ports:
      - "5000:5000"
    networks:
      - frontend
    deploy:
      replicas: 2
      resources:
        limits:
          memory: 200M
      restart_policy:
        condition: on-failure
      update_config:
        order: start-first
      placement:
        constraints: [node.role==worker]

  admin:
    image: registry.cn-hangzhou.aliyuncs.com/brusw/blog-admin
    ports:
      - "8080:8080"
    networks:
      - frontend
    deploy:
      replicas: 2
      resources:
        limits:
          memory: 50M
      restart_policy:
        condition: on-failure
      update_config:
        order: start-first
      placement:
        constraints: [node.role==worker]

networks:
  frontend:
    external: true
  backend:
    external: true

添加集群网络

登录集群管理节点,创建两个 overlay 类型的网络,用于集群服务之间的通信:

$ docker network create --driver overlay frontend

$ docker network create --driver overlay --attachable backend

声明 --attachable 参数表示当前网络可以被容器直接加入。

接下来将现有 MySQL 容器(brusw-mysql80)添加到 backend 集群网络:

$ docker network connect backend brusw-mysql80

执行部署命令

由于使用的是私有仓库,部署命令需要加上 --with-registry-auth 参数,确保其他节点可以拉取镜像:

$ docker stack deploy -c docker-stack.yml --with-registry-auth brusw_blog

Creating service brusw_blog_koa
Creating service brusw_blog_nuxt
Creating service brusw_blog_admin

常用命令

列出集群服务

$ docker stack services brusw_blog

ID              NAME                MODE          REPLICAS    IMAGE                                                        PORTS
3uw2muy7wz5e    brusw_blog_admin    replicated    2/2         registry.cn-hangzhou.aliyuncs.com/brusw/blog-admin:latest    *:8080->8080/tcp
jz0odkclw5si    brusw_blog_koa      replicated    2/2         registry.cn-hangzhou.aliyuncs.com/brusw/blog-koa:latest      *:3000->3000/tcp
h7z7akeuq8n8    brusw_blog_nuxt     replicated    2/2         registry.cn-hangzhou.aliyuncs.com/brusw/blog-nuxt:latest     *:5000->5000/tcp

服务扩(缩)容

$ docker service scale brusw_blog_koa=2

brusw_blog_koa scaled to 2
overall progress: 2 out of 2 tasks 
1/2: running   [==================================================>] 
2/2: running   [==================================================>] 
verify: Service converged

更新指定服务

$ docker service update --force brusw_blog_koa

brusw_blog_koa
overall progress: 2 out of 2 tasks 
1/2: running   [==================================================>] 
2/2: running   [==================================================>] 
verify: Service converged
相关推荐
  • 使用 TIG 构建自动化监控平台
  • Jenkins 多分支流水线构建标签
  • CentOS 7 安装 Blue Ocean
  • Certbot 申请免费 HTTPS 证书
  • SSH 免密登录 Linux 服务器