CodeGym /课程 /Docker SELF /服务扩展

服务扩展

Docker SELF
第 16 级 , 课程 2
可用

8.1 命令 docker compose scale

服务扩展是增加或减少运行同一个服务的容器实例数量的过程,用于管理负载和保障应用程序的容错能力。在 Docker Compose 中,可以通过 docker compose scale(旧版本)命令或者新版本中的参数 --scale 来扩展服务。

扩展的核心概念:

  1. 可扩展性: 可以根据当前负载轻松增加或减少服务实例的数量。
  2. 容错性: 运行多个服务实例可以确保容错性,因为一个实例的故障不会导致整个服务中断。
  3. 负载平衡: 在多个服务实例之间分配负载以优化性能。

使用命令 docker compose scale

命令的语法:


docker compose scale SERVICE=NUM

其中:

  • SERVICE: 需要扩展的服务名称。
  • NUM: 要运行的实例数量。

使用示例:

假设你有一个包含服务定义的文件 compose.yaml,服务名称为 web

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

要启动 3 个 web 服务实例,请使用以下命令:

Terminal

docker compose scale web=3

注意: 在运行 docker compose scale 命令之前,请确保通过 docker compose up 命令启动服务。

在新版本中使用参数 --scale

在 Docker Compose 的新版本中,docker compose scale 命令被替换为参数 --scale,它与 up 命令一起使用。

Terminal

docker compose up --scale web=3

这种方法更优先推荐,因为它可以同时启动和扩展服务。

8.2 实践例子

例子 1: 扩展 Web 服务

创建一个文件 compose.yaml:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80-90:80"

启动并扩展服务到 3 个实例:

Terminal

docker compose up --scale web=3

现在你会有 3 个 Nginx Web 服务实例,它们运行在 80 到 90 的端口范围内。

重要! 如果服务需要扩展到多个实例,必须指定端口范围,比如:"80-90:80"。 这样会「预留」主机上的 10 个端口范围。 当添加新的服务副本时,会从这个范围内分配端口。 如果没有提前设置,端口会被随机选择,副本可能无法访问。

例子 2: 使用数据库扩展

创建一个文件 compose.yaml:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80-90:80"
    depends_on:
      - db

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password

启动并扩展 web 服务到 4 个实例:

Terminal

docker compose up --scale web=4

现在你会有 4 个 Nginx Web 服务实例,它们和一个 PostgreSQL 数据库一起工作。

8.3 管理可扩展的服务

对服务扩展之后,你可以用 Docker Compose 的命令来管理实例。

查看运行中的容器

使用命令 docker compose ps 查看所有运行的容器:

Terminal

docker compose ps

停止并删除可扩展的服务

要停止并删除服务的所有实例,可以使用命令 docker compose down

Terminal

docker compose down

提示与建议:

  1. 负载均衡: 使用负载均衡器将流量分配到服务的多个实例之间。比如你可以用 NginxHAProxy 实现这个目的。
  2. 数据保存: 确保可扩展服务生成的数据保存在 volumes 或外部存储中,以避免在停止或删除容器时丢失数据。
  3. 监控: 使用监控工具,比如 PrometheusGrafana,追踪服务扩展的性能和状态。
  4. 自动扩展: 可以考虑用调度器比如 KubernetesDocker Swarm 来根据负载自动扩展服务。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION