Docker进阶:Docker-compose 实现服务弹性伸缩

Docker进阶:Docker-compose 实现服务弹性伸缩

  • 一、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💖点点关注,收藏不迷路💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/285403.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【项目管理后台】Vue3+Ts+Sass实战框架搭建二

Vue3TsSass搭建 git cz的配置mock 数据配置viteMockServe 建立mock/user.ts文件夹测试一下mock是否配置成功 axios二次封装解决env报错问题&#xff0c;ImportMeta”上不存在属性“env” 统一管理相关接口新建api/index.js 路由的配置建立router/index.ts将路由进行集中封装&am…

AIGC实战——Transformer模型

AIGC实战——Transformer模型 0. 前言1. T52. GPT-3 和 GPT-43. ChatGPT小结系列链接 0. 前言 我们在 GPT (Generative Pre-trained Transformer) 一节所构建的 GPT 模型是一个解码器 Transformer&#xff0c;它逐字符地生成文本字符串&#xff0c;并使用因果掩码只关注输入字…

海外媒体宣发:十大国外中文网站-大舍传媒

十大国外中文网站 1、欧洲时报 覆盖欧洲且较具影响力的华文媒体 国外中文新闻网站&#xff0c;欧洲时报文化传媒集团旗舰日报《欧洲时报》旗下官方网站&#xff0c;总部设在法国巴黎&#xff0c;创刊于1983年&#xff0c;现已成为唯一发行覆盖全欧、发行量最大、最具影响力的华…

Vue3 上手笔记

1. Vue3简介 2020年9月18日&#xff0c;Vue.js发布版3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;n 经历了&#xff1a;4800次提交、40个RFC、600次PR、300贡献者 官方发版地址&#xff1a;Release v3.0.0 One Piece vuejs/core 截止2023年10月&#xff0c;最…

STM32最小核心板使用HAL库ADC读取MCU温度(使用DMA通道)

STM32自带CPU的温度数据&#xff0c;需要使用ADC去读取。因此在MX创建项目时如图配置&#xff1a; 模块初始化代码如下&#xff1a; void MX_ADC1_Init(void) {/* USER CODE BEGIN ADC1_Init 0 *//* USER CODE END ADC1_Init 0 */ADC_ChannelConfTypeDef sConfig {0};/* USER…

Docker 入门使用说明

Docker 入门使用说明 Docker 安装 Docker 官网&#xff1a;Docker Docker 安装说明&#xff1a;Docker 安装说明 这里由于 Docker 在实时更新&#xff0c;所以每次安装 Docker 用来导入 key 的链接可能会有变化&#xff0c;这里就参考官方的安装方法即可 Docker 常用命令说…

(ES6)前端八股文修炼Day2

1. let const var 的区别 var&#xff1a; var 是在 ES5 中引入的声明变量的关键字。 具有函数作用域&#xff0c;而不是块作用域&#xff0c;这意味着使用 var 声明的变量在函数内部是可见的。 变量可以被重复声明&#xff0c;而且变量的值可以在声明前使用&#xff0c;这可能…

生成微信小程序二维码

首页 -> 统计 可以通过上面二个地方配置&#xff0c;生成小程序的二维码&#xff0c;并且在推广分析里&#xff0c;有详细的分析数据&#xff0c;

Vue3更新Package.json版本号

由于我之前已经更新过了&#xff0c;下面的方法提示我已经是最新的了&#xff0c;记录一下&#xff0c;过段时间在测试一下 npm install -g vue/clivue upgrade

【Hadoop大数据技术】——Hadoop高可用集群(学习笔记)

&#x1f4d6; 前言&#xff1a;Hadoop设计之初&#xff0c;在架构设计和应用性能方面存在很多不如人意的地方&#xff0c;如HDFS和YARN集群的主节点只能有一个&#xff0c;如果主节点宕机无法使用&#xff0c;那么将导致HDFS或YARN集群无法使用&#xff0c;针对上述问题&#…

项目1-加法计算器

1.创建项目 2.导入前端代码 2.1 static包内 2.2 测试前端代码是否有误 显示成功说明无误 2.3 定义用户接口 请求路径&#xff1a;calc/sum 请求方式&#xff1a;GET/POST 接口描述&#xff1a;计算两个整数相加 请求参数: 参数名类型是否必须备注num1Integer是参与计算的第…

YiYi-Web项目介绍

YiYi-Web项目介绍 1. 简介2. 使用2.1 后端开发环境2.2 前端开发环境 3. 测试环境&#xff1a;4. 更新日志5. 打包情况6.项目截图 本项目前端是html、css、js、jQuery基础技术。 后端都是最新的SpringBoot技术&#xff0c;不分离版本&#xff0c; 是最基础的项目开发教程&#x…

【C语言】linux内核pci_alloc_irq_vectors

一、注释 代码中包含了几个关于PCI&#xff08;外围组件互联&#xff09;设备中断请求&#xff08;IRQ&#xff09;向量分配的函数&#xff0c;以及内联函数声明&#xff0c;下面是对这些函数的中文注释&#xff1a; static inline int pci_alloc_irq_vectors_affinity(struc…

Java安全 反序列化(3) CC1链-TransformedMap版

Java安全 反序列化(3) CC1链-TransformedMap版 本文尝试从CC1的挖掘思路出发&#xff0c;理解CC1的实现原理 文章目录 Java安全 反序列化(3) CC1链-TransformedMap版配置jdk版本和源代码配置前记 为什么可以利用一.CC链中的命令执行我们可以尝试一下通过InvokerTransformer.tr…

曲线生成 | 图解Reeds-Shepp曲线生成原理(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 什么是Reeds-Shepp曲线&#xff1f;2 Reeds-Shepp曲线的运动模式3 Reeds-Shepp曲线算法原理3.1 坐标变换3.2 时间翻转(time-flip)3.3 反射变换(reflect)3.4 后向变换(backwards) 4 仿真实现4.1 ROS C实现4.2 Python实现4.3 Matlab实现 0 专栏介绍 &#x1f5…

如何使用PHP和RabbitMQ实现消息队列?

前言 今天我们来做个小试验&#xff0c;用PHP和RabbitMQ实现消息队列功能。 前期准备&#xff0c;需要安装好docker、docker-compose的运行环境。 如何使用docker部署php服务_php如何使用docker发布-CSDN博客 一、安装RabbitMQ 1、创建相关目录&#xff0c;执行如下命令。…

吴恩达2022机器学习专项课程(一) 3.3 成本函数的公式

问题预览 模型的参数&#xff08;w和b&#xff09;有什么作用&#xff1f;不同的w和b对线性回归模型有什么影响&#xff1f;训练集里的y和线性回归模型预测的y&#xff08;y帽&#xff09;的区别是什么&#xff1f;成本函数的作用是什么&#xff1f;成本函数的公式是什么&…

neo4j所有关系只显示RELATION,而不显示具体的关系

当看r时&#xff0c;真正的关系在properties中的type里&#xff0c;而type为“RELATION” 造成这个的原因是&#xff1a; 在创建关系时&#xff0c;需要指定关系的类型&#xff0c;这是固定的&#xff0c;不能像属性那样从CSV文件的一个字段动态赋值。标准的Cypher查询语言不支…

【 Mysql8.0 忘记登录密码 可以试试 】

** Mysql8.0 忘记登录密码 可以试试 ** 2024-3-21 段子手168 1、首先停止 mysql 服务 &#xff0c;WIN R 打开运行&#xff0c;输入 services.msc 回车打开服务&#xff0c;找到 mysql 服务&#xff0c;停止。 然后 WIN R 打开运行&#xff0c;输入 CMD 打开控制台终端输…

BMS均衡的相关原理及解释

1为什么要做均衡&#xff1f; 由于电池使用工艺和材料的本身有差异&#xff0c;及电池实际使用过程中所处的温度、湿度等环境的不同&#xff0c;电池包内部的单体电池存在SOC差异&#xff0c;这个SOC的差异从直观上的体现就是电池的电压不同。 另外一个重要原因是由于电池自身…