跨境互联网 跨境互联网
首页
  • AI 工具

    • 绘图提示词工具 (opens new window)
    • ChatGPT 指令 (opens new window)
  • ChatGPT

    • ChatGP T介绍
    • ChatGPT API 中文开发手册
    • ChatGPT 中文调教指南
    • ChatGPT 开源项目
  • Midjourney

    • Midjourney 文档
  • Stable Diffusion

    • Stable Diffusion 文档
  • 其他

    • AIGC 热门文章
    • 账号合租 (opens new window)
    • 有趣的网站
  • Vue

    • Vue3前置
  • JAVA基础

    • Stream
    • Git
    • Maven
    • 常用第三方类库
    • 性能调优工具
    • UML系统建模
    • 领域驱动设计
    • 敏捷开发
    • Java 测试
    • 代码规范及工具
    • Groovy 编程
  • 并发编程&多线程

    • 并发编程
    • 高性能队列 Disruptor
    • 多线程并发在电商系统下的应用
  • 其他

    • 面试题
  • 消息中间中间件

    • Kafka
    • RabbitMQ
    • RocketMQ
  • 任务调度

    • Quartz
    • XXL-Job
    • Elastic-Job
  • 源码解析

    • Mybatis 高级使用
    • Mybatis 源码剖析
    • Mybatis-Plus
    • Spring Data JPA
    • Spring 高级使用
    • Spring 源码剖析
    • SpringBoot 高级使用
    • SpringBoot 源码剖析
    • Jdk 解析
    • Tomcat 架构设计&源码剖析
    • Tomcat Web应用服务器
    • Zookeeper 高级
    • Netty
  • 微服务框架

    • 分布式原理
    • 分布式集群架构场景化解决方案
    • Dubbo 高级使用
    • Dubbo 核心源码剖析
    • Spring Cloud Gateway
    • Nacos 实战应用
    • Sentinel 实战应用
    • Seata 分布式事务
  • 数据结构和算法的深入应用
  • 存储

    • 图和Neo4j
    • MongoDB
    • TiDB
    • MySQL 优化
    • MySQL 平滑扩容实战
    • MySQL 海量数据存储与优化
    • Elasticsearch
  • 缓存

    • Redis
    • Aerospike
    • Guava Cache
    • Tair
  • 文件存储

    • 阿里云 OSS 云存储
    • FastDF 文件存储
  • 基础

    • Linux 使用
    • Nginx 使用与配置
    • OpenResty 使用
    • LVS+Keepalived 高可用部署
    • Jekins
  • 容器技术

    • Docker
    • K8S
    • K8S
  • 01.全链路(APM)
  • 02.电商终极搜索解决方案
  • 03.电商亿级数据库设计
  • 04.大屏实时计算
  • 05.分库分表的深入实战
  • 06.多维系统下单点登录
  • 07.多服务之间分布式事务
  • 08.业务幂等性技术架构体系
  • 09.高并发下的12306优化
  • 10.每秒100W请求的秒杀架构体系
  • 11.集中化日志管理平台的应用
  • 12.数据中台配置中心
  • 13.每天千万级订单的生成背后痛点及技术突破
  • 14.红包雨的架构设计及源码实现
  • 人工智能

    • Python 笔记
    • Python 工具库
    • 人工智能(AI) 笔记
    • 人工智能(AI) 项目笔记
  • 大数据

    • Flink流处理框架
  • 加密区

    • 机器学习(ML) (opens new window)
    • 深度学习(DL) (opens new window)
    • 自然语言处理(NLP) (opens new window)
AI 导航 (opens new window)

Revin

首页
  • AI 工具

    • 绘图提示词工具 (opens new window)
    • ChatGPT 指令 (opens new window)
  • ChatGPT

    • ChatGP T介绍
    • ChatGPT API 中文开发手册
    • ChatGPT 中文调教指南
    • ChatGPT 开源项目
  • Midjourney

    • Midjourney 文档
  • Stable Diffusion

    • Stable Diffusion 文档
  • 其他

    • AIGC 热门文章
    • 账号合租 (opens new window)
    • 有趣的网站
  • Vue

    • Vue3前置
  • JAVA基础

    • Stream
    • Git
    • Maven
    • 常用第三方类库
    • 性能调优工具
    • UML系统建模
    • 领域驱动设计
    • 敏捷开发
    • Java 测试
    • 代码规范及工具
    • Groovy 编程
  • 并发编程&多线程

    • 并发编程
    • 高性能队列 Disruptor
    • 多线程并发在电商系统下的应用
  • 其他

    • 面试题
  • 消息中间中间件

    • Kafka
    • RabbitMQ
    • RocketMQ
  • 任务调度

    • Quartz
    • XXL-Job
    • Elastic-Job
  • 源码解析

    • Mybatis 高级使用
    • Mybatis 源码剖析
    • Mybatis-Plus
    • Spring Data JPA
    • Spring 高级使用
    • Spring 源码剖析
    • SpringBoot 高级使用
    • SpringBoot 源码剖析
    • Jdk 解析
    • Tomcat 架构设计&源码剖析
    • Tomcat Web应用服务器
    • Zookeeper 高级
    • Netty
  • 微服务框架

    • 分布式原理
    • 分布式集群架构场景化解决方案
    • Dubbo 高级使用
    • Dubbo 核心源码剖析
    • Spring Cloud Gateway
    • Nacos 实战应用
    • Sentinel 实战应用
    • Seata 分布式事务
  • 数据结构和算法的深入应用
  • 存储

    • 图和Neo4j
    • MongoDB
    • TiDB
    • MySQL 优化
    • MySQL 平滑扩容实战
    • MySQL 海量数据存储与优化
    • Elasticsearch
  • 缓存

    • Redis
    • Aerospike
    • Guava Cache
    • Tair
  • 文件存储

    • 阿里云 OSS 云存储
    • FastDF 文件存储
  • 基础

    • Linux 使用
    • Nginx 使用与配置
    • OpenResty 使用
    • LVS+Keepalived 高可用部署
    • Jekins
  • 容器技术

    • Docker
    • K8S
    • K8S
  • 01.全链路(APM)
  • 02.电商终极搜索解决方案
  • 03.电商亿级数据库设计
  • 04.大屏实时计算
  • 05.分库分表的深入实战
  • 06.多维系统下单点登录
  • 07.多服务之间分布式事务
  • 08.业务幂等性技术架构体系
  • 09.高并发下的12306优化
  • 10.每秒100W请求的秒杀架构体系
  • 11.集中化日志管理平台的应用
  • 12.数据中台配置中心
  • 13.每天千万级订单的生成背后痛点及技术突破
  • 14.红包雨的架构设计及源码实现
  • 人工智能

    • Python 笔记
    • Python 工具库
    • 人工智能(AI) 笔记
    • 人工智能(AI) 项目笔记
  • 大数据

    • Flink流处理框架
  • 加密区

    • 机器学习(ML) (opens new window)
    • 深度学习(DL) (opens new window)
    • 自然语言处理(NLP) (opens new window)
AI 导航 (opens new window)
  • Docker

    • 基础使用-Docker是什么
    • 基础使用-为什么使用Docker
    • 基础使用-Docker安装
    • 基础使用-Docker架构
    • 基础使用-Docker部署微服务
    • 集群管理-微服务Docker打包
    • 集群管理-微服务Docker打包
    • 集群管理-任务编排工具
    • 集群管理-docker-compose容器编排
    • 集群管理-Swarm集群编排
    • 集群管理-Docker Stack管理服务
      • 1 集群搭建案例
        • 1.1 应用部署情况
        • 1.2 创建docker-compose.yml
        • 1.2.1 overlay网络
        • 1.2.2 部署节点副本数
        • 1.2.3 节点约束
        • 1.3 部署服务
        • 1.3.1 部署应用
        • 1.3.2 查看部署情况
        • 1.4 服务部署情况
        • 1.4.1 查看nacos节点信息
        • 1.4.2 测试访问服务
      • 2 集群管理
        • 2.1 更新服务
        • 2.1.1 参数详解
        • 2.1.2 更新镜像
        • 2.2 删除应用
        • 2.2.1 查看部署集群
        • 2.2.2 执行删除
        • 2.3 相关命令(手册)
        • 2.3.1 docker stack 常用命令
        • 2.3.2 docker service 常用命令
        • 2.3.3 docker node 常用命令
        • 2.3.4 docker swarm 常用命令
    • 集群管理-portainer使用
    • 补充-Docker
    • 资料
  • k8s

  • k8s

  • Docker容器
  • Docker
Revin
2023-06-19
目录

集群管理-Docker Stack管理服务

我们上面使用swarm部署服务,单个服务还好,如果很多个服务怎么来解决呢,这里就用到了Docker Stack管理服务。

在上面我们学会了如何配置一个swarm集群,并且知道如何在swarm集群上部署应用,现在,我们开始了解Docker层级关系中的最高一个层级——stack,一个stack就是一组有关联的服务的组合,可以编排在一起,一起管理

单机模式下,我们可以使用 Docker-Compose来编排多个服务,而 Docker Swarm 只能实现对单个服务的简单部署,于是就引出了本文的主角 Docker Stack ,通过 Docker Stack 我们只需对已有的 docker-compose.yml 配置文件稍加改造就可以完成 Docker 集群环境下的多服务编排。

# 1 集群搭建案例

# 1.1 应用部署情况

服务名称 数量
mysql 1
nacos 1
learn-docker-gateway 1
learn-docker-web 2
learn-docker-storage 2

# 1.2 创建docker-compose.yml

首先创建一个 docker-compose.yml 文件,使用 Docker Compose v3 (opens new window) 语法

我们把我们原来单机版的docker-compose.yml改造以下

version: '3.9'   
services:
    mysql:
        image: mysql:5.7.38
        networks:
            - learn-docker-network
        volumes:
            - "/tmp/etc/mysql:/etc/mysql/mysql.conf.d/"
            - "/tmp/data/mysql:/var/lib/mysql"
        environment:
            MYSQL_ROOT_PASSWORD: 'root'
        deploy:
            mode: replicated
            replicas: 1
            placement:
                constraints:
                    - 'node.labels.role == data'
            restart_policy:
                condition: on-failure
                delay: 5s
                
    nacos:
        image: nacos/nacos-server
        ports:
            - "8848:8848"
        networks:
            - learn-docker-network
        environment:
            MODE: 'standalone'
            JVM_XMS: '128m'
            JVM_XMX: '128m'
        deploy:
            mode: replicated
            replicas: 1
            placement:
                constraints:
                    - 'node.labels.role == data'
            restart_policy:
                condition: on-failure
                delay: 5s
    
    learn-docker-web:
        image: registry.cn-hangzhou.aliyuncs.com/baiyp/learn-docker-web:1.0-SNAPSHOT
        networks:
            - learn-docker-network
        depends_on:
            - nacos
            - mysql
        deploy:
            mode: replicated
            replicas: 2
            restart_policy:
                condition: on-failure
                delay: 5s
                
            
    learn-docker-storage:
        image: registry.cn-hangzhou.aliyuncs.com/baiyp/learn-docker-storage:1.0-SNAPSHOT
        networks:
            - learn-docker-network
        depends_on:
            - nacos
            - mysql
        deploy:
            mode: replicated
            replicas: 2
            restart_policy:
                condition: on-failure
                delay: 5s
    learn-docker-gateway:
        image: registry.cn-hangzhou.aliyuncs.com/baiyp/learn-docker-gateway:1.0-SNAPSHOT
        ports:
            - "8888:8888"
        networks:
            - learn-docker-network
        depends_on:
            - nacos
            - mysql
        deploy:
            mode: replicated
            replicas: 1
            restart_policy:
                condition: on-failure
                delay: 5s
                
    visualizer:
        image: dockersamples/visualizer
        ports:
            - "8080:8080"
        volumes:
            - "/var/run/docker.sock:/var/run/docker.sock"
        deploy:
            mode: replicated
            replicas: 1
            restart_policy:
                condition: on-failure
                delay: 5s


networks:
    learn-docker-network:
        driver: overlay
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102

配置介绍

Stack文件就是Docker Compose文件。唯一的要求就是version:一项需要是3.0或者更高的值。在Docker根据某个Stack文件部署应用的时候,首先会检查并创建networks:关键字对应网络。如果网络不存在,Docker会进行创建。下面我们详细看下这几个模块。

# 1.2.1 overlay网络

这里定义了1个网络,默认情况下网络都是使用overlay驱动,新建对应的覆盖类型的网络。

networks:
    learn-docker-network:
        driver: overlay
1
2
3

# 1.2.2 部署节点副本数

接下来我们进一步了解deploy关键字新增的内容

        deploy:
            mode: replicated
            replicas: 2
            restart_policy:
                condition: on-failure
                delay: 5s
1
2
3
4
5
6
  • replicas: 2 设置了期望服务的副本数量为2,默认为1.如果服务正在运行,需要调整副本数。可以调整stack文件中的 replicas 的数值,然后重新部署stack,重新部署stack并不会影响那些没有改动的服务。
  • restart_policy: 定义了Swarm针对容器异常退出的重启策略。当前服务的重启策略是:如果某个副本以非0返回值退出,会立即重启当前副本,重启最多尝试3次,每次都是等待之多120s来检测是否成功,每次重启的间隔是5s。

# 1.2.3 节点约束

因为我们的数据库节点只能部署在数据节点,因为需要挂载本地的数据文件以及数据库文件,所有需要使用标签进行节点约束

    mysql:
        image: mysql:5.7.33
        networks:
            - learn-docker-network
        volumes:
            - "/tmp/etc/mysql:/etc/mysql/mysql.conf.d/"
            - "/tmp/data/mysql:/var/lib/mysql"
        environment:
            MYSQL_ROOT_PASSWORD: 'root'
        deploy:
            mode: replicated
            replicas: 1
            placement:
                constraints:
                    - 'node.labels.role == data'
            restart_policy:
                condition: on-failure
                delay: 5s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

这里的 'node.labels.role == data含义就是将当前mysql节点约束在标签名字是role,并且值是data的数据节点,更多操作请参考下文

# 1.3 部署服务

# 1.3.1 部署应用

使用docker stack deploy 命令部署

docker stack deploy -c docker-compose.yml learn-docker-test
1

这里我们指定了docker-compose文件,并把stack命名为 learn-docker-test。

image-20210330114330830

# 1.3.2 查看部署情况

可以通过docker stack ls命令查看集群部署情况,会列出 Swarm 集群中的全部 Stack,包括每个 Stack 拥有多少服务

image-20210330140704607

# 1.4 服务部署情况

# 1.4.1 查看nacos节点信息

访问nacos服务,发现我们的服务都已经注册

image-20210330134830060

# 1.4.2 测试访问服务

访问服务接口测试

curl http://192.168.245.153:8888/employeapi/find/10001| python -m json.tool
1

image-20210330135429755

# 2 集群管理

# 2.1 更新服务

docker service upadte可以对swarm服务进行升级

# 2.1.1 参数详解

  • --force 强制更新重启服务,无论是否配置或镜像改变都更新
  • --image image:tag 制定更新的镜像
  • --with-registry-auth 向 Swarm 代理发送 Registry 认证详细信息,私有仓库需要携带该参数

# 2.1.2 更新镜像

#查看服务详情
docker service ls
# 更新服务
docker service update --image manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-storage:1.0-SNAPSHOT learn-docker-test_learn-docker-storage
1
2
3
4

image-20210330135928983

# 2.2 删除应用

# 2.2.1 查看部署集群

docker stack ls可以查看部署的服务列表

image-20210330140526628

# 2.2.2 执行删除

docker stack rm stack名称命令会删除整个stack集群,注意移除操作执行前并不会进行二次确认。

docker stack rm learn-docker-test
1

image-20210330141754719

# 2.3 相关命令(手册)

# 2.3.1 docker stack 常用命令

命令 说明
docker stack deploy 部署新的堆栈或更新现有堆栈
docker stack ls 列出现有堆栈
docker stack ps 列出堆栈中的任务
docker stack rm 删除堆栈
docker stack services 列出堆栈中的服务
docker stack down 移除某个堆栈(不会删除数据)

# 2.3.2 docker service 常用命令

命令 说明
docker service create 部署服务
docker service inspect 查看服务详情
docker service logs 产看某个服务日志
docker service ls 查看所有服务详情
docker service rm 删除某个服务(-f强制删除)
docker service scale 设置某个服务个数
docker service update 更新某个服务

# 2.3.3 docker node 常用命令

命令 说明
docker node ls 查看所有集群节点
docker node rm 删除某个节点(-f强制删除)
docker node inspect 查看节点详情
docker node demote 节点降级,由管理节点降级为工作节点
docker node promote 节点升级,由工作节点升级为管理节点
docker node update 更新节点
docker node ps 查看节点中的 Task 任务

# 2.3.4 docker swarm 常用命令

命令 说明
docker swarm init 初始化集群
docker swarm join-token worker 查看工作节点的 token
docker swarm join-token manager 查看管理节点的 token
docker swarm join 加入集群中
上次更新: 2025/04/03, 11:07:08
集群管理-Swarm集群编排
集群管理-portainer使用

← 集群管理-Swarm集群编排 集群管理-portainer使用→

最近更新
01
tailwindcss
03-26
02
PaddleSpeech
02-18
03
whisper
02-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 跨境互联网 | 豫ICP备14016603号-5 | 豫公网安备41090002410995号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式