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

时间:2024-03-25 07:07:27

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:latest
    restart: "always"
    environment:
      APP_ENV: development
    ports:
      - "80:80"
    networks:
      - my_network
    volumes:
      -  /etc/nginx/nginx.conf:/etc/nginx/nginx.conf
      -  /usr/local/nginx/html:/usr/local/nginx/html

networks:
  my_network:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.16.238.0/24
          gateway: 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:latest
    restart: "always"
    environment:
      APP_ENV: development
    ports:
      - 80
    networks:
      - my_network
    volumes:
      -  /etc/nginx/nginx.conf:/etc/nginx/nginx.conf
      -  /usr/local/nginx/html:/usr/local/nginx/html

networks:
  my_network:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.16.238.0/24
          gateway: 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????点点关注,收藏不迷路????