8.1 命令 docker compose scale
服务扩展是增加或减少运行同一个服务的容器实例数量的过程,用于管理负载和保障应用程序的容错能力。在 Docker Compose 中,可以通过 docker compose scale
(旧版本)命令或者新版本中的参数 --scale
来扩展服务。
扩展的核心概念:
- 可扩展性: 可以根据当前负载轻松增加或减少服务实例的数量。
- 容错性: 运行多个服务实例可以确保容错性,因为一个实例的故障不会导致整个服务中断。
- 负载平衡: 在多个服务实例之间分配负载以优化性能。
使用命令 docker compose scale
命令的语法:
docker compose scale SERVICE=NUM
其中:
- SERVICE: 需要扩展的服务名称。
- NUM: 要运行的实例数量。
使用示例:
假设你有一个包含服务定义的文件 compose.yaml
,服务名称为 web。
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
要启动 3 个 web 服务实例,请使用以下命令:
docker compose scale web=3
注意: 在运行 docker compose scale
命令之前,请确保通过 docker compose up
命令启动服务。
在新版本中使用参数 --scale
在 Docker Compose 的新版本中,docker compose scale
命令被替换为参数 --scale
,它与 up
命令一起使用。
docker compose up --scale web=3
这种方法更优先推荐,因为它可以同时启动和扩展服务。
8.2 实践例子
例子 1: 扩展 Web 服务
创建一个文件 compose.yaml
:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80-90:80"
启动并扩展服务到 3 个实例:
docker compose up --scale web=3
现在你会有 3 个 Nginx Web 服务实例,它们运行在 80 到 90 的端口范围内。
重要!
如果服务需要扩展到多个实例,必须指定端口范围,比如:"80-90:80"
。 这样会「预留」主机上的 10 个端口范围。 当添加新的服务副本时,会从这个范围内分配端口。 如果没有提前设置,端口会被随机选择,副本可能无法访问。
例子 2: 使用数据库扩展
创建一个文件 compose.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 个实例:
docker compose up --scale web=4
现在你会有 4 个 Nginx Web 服务实例,它们和一个 PostgreSQL 数据库一起工作。
8.3 管理可扩展的服务
对服务扩展之后,你可以用 Docker Compose 的命令来管理实例。
查看运行中的容器
使用命令 docker compose ps
查看所有运行的容器:
docker compose ps
停止并删除可扩展的服务
要停止并删除服务的所有实例,可以使用命令 docker compose down
:
docker compose down
提示与建议:
- 负载均衡: 使用负载均衡器将流量分配到服务的多个实例之间。比如你可以用 Nginx 或 HAProxy 实现这个目的。
- 数据保存: 确保可扩展服务生成的数据保存在 volumes 或外部存储中,以避免在停止或删除容器时丢失数据。
- 监控: 使用监控工具,比如 Prometheus 或 Grafana,追踪服务扩展的性能和状态。
- 自动扩展: 可以考虑用调度器比如 Kubernetes 或 Docker Swarm 来根据负载自动扩展服务。
GO TO FULL VERSION