Docker进阶:Docker-cpmpose 实现服务弹性伸缩
Docker进阶:Docker-cpmpose 实现服务弹性伸缩
- 一、Docker Compose基础概念
- 1.1 Docker Compose简介
- 1.2 Docker Compose文件结构
- 二、弹性伸缩的原理和实现步骤
- 2.1 弹性伸缩原理
- 2.2 实现步骤
- 三、技术实践案例
- 3.1 场景描述
- 3.2 配置Docker Compose文件
- 3.3 使用 docker-compose create 创建整个服务配置中定义的所有容器实例
- 3.4 docker-compose常用命令
- 3.5 修改Docker Compose文件用于创建多个服务的实例数量
| 💖The Begin💖点点关注,收藏不迷路💖 |

前提你已经安装了Docker Compose
一、Docker Compose基础概念
1.1 Docker Compose简介
Docker Compose是一个用于定义和运行多个Docker容器的工具,它通过一个单独的文件来配置应用的服务,并使用命令行工具来启动、停止和重新创建这些服务。
通过Docker Compose,我们可以方便地定义一个应用的各个组件,并且能够通过简单的命令来进行管理。
1.2 Docker Compose文件结构
Docker Compose文件通常以docker-compose.yml为文件名,其中包含了应用的服务定义、网络设置、数据卷挂载等信息。
该文件采用YAML格式,通过缩进来表示层级关系,易于阅读和编写。
二、弹性伸缩的原理和实现步骤
2.1 弹性伸缩原理
弹性伸缩是指根据系统负载情况,自动增加或减少资源以满足当前需求的能力。在Docker Compose中,我们可以通过监控应用的负载情况,动态地调整应用服务的实例数量,从而实现弹性伸缩。
2.2 实现步骤
实现弹性伸缩的关键在于监控和自动化。我们可以通过监控应用的CPU、内存、网络等指标,结合自动化脚本来实现弹性伸缩。具体步骤包括:
1、监控应用的负载情况,获取关键指标;
2、编写自动化脚本,根据监控指标来动态调整服务实例数量;
3、配置Docker Compose文件,定义应用服务的最小和最大实例数量。
三、技术实践案例
3.1 场景描述
假设我们有一个Web应用,由Nginx作为反向代理,后端服务使用Node.js编写的API服务。我们希望在高负载时能够自动增加API服务的实例数量,以应对突发流量。
3.2 配置Docker Compose文件
Docker Compose官网文档:https://docs.docker.com/compose/compose-file/compose-file-v2/
以下是一个简单的docker-compose.yml配置示例,用于实现Nginx反向代理的弹性伸缩:
1、vim docker-compose.yml,编写如下内容:
version: '3.7'services:web-nginx:image: nginx:latestrestart: "always"environment:APP_ENV: developmentports:- "80:80"networks:- my_networkvolumes:- /etc/nginx/nginx.conf:/etc/nginx/nginx.conf- /usr/local/nginx/html:/usr/local/nginx/htmlnetworks:my_network:driver: bridgeipam:driver: defaultconfig:- subnet: 172.16.238.0/24gateway: 172.16.238.1
2、docker-compose config,验证 docker-compose.yml 文件
docker-compose config
这个命令会检查并输出有效的 Docker Compose 配置。

3.3 使用 docker-compose create 创建整个服务配置中定义的所有容器实例
docker-compose create web-nginx

后台模式下启动docker-compose服务,启动web-nginx 的服务容器实例。
## -d 后台模式
docker-compose up -d web-nginx

3、查看使用docker-compose启动的所有服务的状态
docker-compose ps
这将显示docker-compose中定义的所有服务的状态信息,包括容器ID、名称、状态等。

而要查看所有正在运行的Docker容器,不管是通过docker-compose启动的还是其他方式启动的,可以使用以下命令:
## 当前运行的
docker ps# #所有、包括运行过的
docker ps -qa
这将列出所有正在运行的Docker容器,包括容器ID、名称、镜像、端口映射等信息。
3.4 docker-compose常用命令
若修改了 docker-compose.yml 文件,使用 docker-compose up -d web-nginx ,再次运行即可。
docker-compose up: 构建并启动所有服务。
docker-compose up -d: 在后台模式下构建并启动所有服务。
docker-compose down: 停止并移除所有服务(并且默认情况下也会删除与这些服务关联的容器、网络和数据卷)。
docker-compose ps: 显示服务状态。
docker-compose logs: 查看服务日志(输出所有)。
docker-compose logs -f <service_name> : 指定服务名称来查看该服务的日志。
docker-compose scale:它用于更改服务的实例数量。
docker-compose restart <service_name>: 重启指定服务。
docker-compose start <service_name>: 启动指定服务。
docker-compose stop <service_name>: 停止指定服务。
docker-compose exec <service_name> <command>: 在指定服务中执行命令。docker-compose start : 启动所有服务。
docker-compose stop : 停止所有服务。
docker-compose restart : 重启所有服务。
docker-compose pause: 暂停所有服务。
docker-compose unpause: 恢复暂停的所有服务。
3.5 修改Docker Compose文件用于创建多个服务的实例数量
1、把前面创建的 “web-nginx” 的服务的容器实例数量扩展到 3 个。
docker-compose up -d --scale web-nginx=3
报错:(端口被占用)
Bind for 0.0.0.0:80 failed: port is already allocated

解决:修改Docker Compose文件(不指定端口、容器名等)
version: '3.7'services:web-nginx:image: nginx:latestrestart: "always"environment:APP_ENV: developmentports:- 80networks:- my_networkvolumes:- /etc/nginx/nginx.conf:/etc/nginx/nginx.conf- /usr/local/nginx/html:/usr/local/nginx/htmlnetworks:my_network:driver: bridgeipam:driver: defaultconfig:- subnet: 172.16.238.0/24gateway: 172.16.238.1

2、再次执行docker-compose up -d --scale web-nginx=3。
成功启动三个,web-nginx。

3、查看使用docker-compose启动的所有服务的状态
docker-compose ps

4、再次执行docker-compose up -d --scale web-nginx=5。增加到5个

6、再次执行docker-compose up -d --scale web-nginx=3。从5个回退到3个


| 💖The End💖点点关注,收藏不迷路💖 |
相关文章:
Docker进阶:Docker-cpmpose 实现服务弹性伸缩
Docker进阶:Docker-cpmpose 实现服务弹性伸缩 一、Docker Compose基础概念1.1 Docker Compose简介1.2 Docker Compose文件结构 二、弹性伸缩的原理和实现步骤2.1 弹性伸缩原理2.2 实现步骤 三、技术实践案例3.1 场景描述3.2 配置Docker Compose文件3.3 使用 docker-…...
opencv各个模块介绍(2)
Features2D 模块:特征检测和描述子计算模块,包括SIFT、SURF等算法。 Features2D 模块提供了许多用于特征检测和描述子匹配的函数和类,这些函数和类可用于图像特征的提取、匹配和跟踪。 FeatureDetector:特征检测器的基类…...
HTTPS:原理、使用方法及安全威胁
文章目录 一、HTTPS技术原理1.1 主要技术原理1.2 HTTPS的工作过程1.2.1 握手阶段1.2.2 数据传输阶段 1.3 HTTPS的安全性 二、HTTPS使用方法三、HTTPS安全威胁四、总结 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer)&am…...
【云开发笔记No.6】腾讯CODING平台
腾讯云很酷的一个应用,现在对于研发一体化,全流程管理,各种工具层出不穷。 云时代用云原生,再加上AI,编码方式真是发生了质的变化。 从前,一个人可以写一个很酷的软件,后来,这变得…...
20.Ubuntu下安装GCC
文章目录 Ubuntu下安装GCC查看官方安装指导错误缺少gmp库缺少32位开发库libcg: error: gengtype-lex.c: No such file or directoryreference 欢迎访问个人网络日志🌹🌹知行空间🌹🌹 Ubuntu下安装GCC 为了支持新的c标准ÿ…...
2.windows ubuntu子系统配置
打开UBuntu后, > wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh #下载conda软件。 > bash Miniconda3-latest-Linux-x86_64.sh #下载完conda后执行这步 > source ~/.bashrc > conda-h #出现一下…...
vscode的一些技巧
技巧1:调试时传参数 在launch.json的configuration中"pwd"或者"program"选项之后添加如下选项: “--args”:["参数1", "参数2", ..., "参数3] 参数之间使用逗号隔开 技巧2:断点 普通断点使…...
JavaEE企业级分布式高级架构师课程
教程介绍 本课程主要面向1-5年及以上工作经验的Java工程师,大纲由IT界知名大牛 — 廖雪峰老师亲自打造,由来自一线大型互联网公司架构师、技术总监授课,内容涵盖深入spring5设计模式/高级web MVC开发/高级数据库设计与开发/高级响应式web开发…...
c语言函数大全(K开头)
c语言函数大全(K开头) There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated should leave quickly. 函数名…...
高效备考2025年AMC8竞赛:吃透2000-2024年600道真题(免费送题)
我们继续来随机看五道AMC8的真题和解析,根据实践经验,对于想了解或者加AMC8美国数学竞赛的考生来说,吃透AMC8历年真题是备考更加科学、有效的方法之一。 最近有家长朋友问我,现在有哪些类似于奥数的比赛可以参加?我的…...
HTML5和CSS3新特性
Html新增属性 1.新增语义化标签 <header>:头部标签 <nav>:导航标签 <article>:内容标签 <section>:定义文档某个区域 <aside>:侧边栏标签 <footer>:尾部标签 2.…...
Java基础-正则表达式
文章目录 1.基本介绍2.正则底层实现1.matcher.find()完成的任务2.matcher.group(0)分析1.源代码2.解释(不分组)3.解释(分组) 3.总结 3.正则表达式语法1.基本介绍2.元字符的转义符号1.基本介绍2.代码实例 3.字符匹配符1.基本介绍2.…...
构建Pytorch虚拟环境教程
构建PyTorch虚拟环境通常涉及使用诸如Anaconda或venv等工具来管理Python环境,以便在一个独立的空间中安装PyTorch和其他依赖项。以下是使用Anaconda创建PyTorch虚拟环境的步骤(适用于不同操作系统,包括Windows、Linux和MacOS)&…...
uniapp页面嵌套其他页面的实现
功能: 类似于一个drawer,当主页面加载的时候会一并加载url对应的组件,当点击后以drawer形式显示组件里面的内容,可动画。 <navigator url"/pages/my/components/personalMessage" slot"right"><view><di…...
XUbuntu22.04之安装Plantuml(二百二十三)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
第四周刷题小结
第一天 P1068 [NOIP2009 普及组] 分数线划定 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路: 这个题感觉不难,主要是用到了结构体cmp的自定义排序,但是还是错了一次,就是没注意到题目给的条件。 #include<iostream&g…...
基于Java中的SSM框架实现考研指导平台系统项目【项目源码+论文说明】
基于Java中的SSM框架实现考研指导平台系统演示 摘要 应对考研的学生,为了更好的使校园考研有一个更好的环境好好的学习,建议一个好的校园网站,是非常有必要的。提供学生的学习提供一个交流的空间。帮助同学们在学习高数、学习设计、学习统计…...
项目2-用户登录
1.创建项目 2.引入前端代码并检查是否有误 3.定义接口 需求分析 对于后端开发⼈员⽽⾔, 不涉及前端⻚⾯的展⽰, 只需要提供两个功能 1. 登录⻚⾯: 通过账号和密码, 校验输⼊的账号密码是否正确, 并告知前端 2. ⾸⻚: 告知前端当前登录⽤⼾. 如果当前已有⽤⼾登录, 返回登录的账…...
网易web安全工程师进阶版课程
课程介绍 《Web安全工程师(进阶)》是由“ i春秋学院联合网易安全部”出品,资深讲师团队通过精炼的教学内容、丰富的实际场景及综合项目实战,帮助学员纵向提升技能,横向拓宽视野,牢靠掌握Web安全工程师核心…...
【Postman】工具使用介绍
一、postman工具介绍 1.什么是postman postman是谷歌开发的一款网页调试和接口测试工具,能够发送任何请求类型的http请求,支持GET/POST/PUT/DELETE等方法。postman简单易用,可以直接填写URL,header,body就可以发送一…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

