1️⃣ 使用 docker-compose up --scale
命令
2️⃣ 结合 docker swarm
进行集群扩展
3️⃣ 配合 Nginx / Traefik 进行负载均衡
1️⃣ 使用 docker-compose up --scale
命令
2️⃣ 结合 docker swarm
进行集群扩展
3️⃣ 配合 Nginx / Traefik 进行负载均衡
在 Docker Compose 中,横向扩展(Scaling)指的是 通过增加同一服务的多个实例(副本)来提高并发能力,适用于 无状态应用(如 Web 服务器)。
然而,某些状态相关的组件(如数据库)通常不适合简单地通过 scale
命令进行扩展,而是需要专门的 集群架构(如 PostgreSQL 的主从复制)。
docker-compose up --scale
命令Docker Compose 允许你通过 --scale
选项快速启动多个相同的容器实例:
docker-compose up --scale web=3 -d
示例:
version: "3.8"
services:
web:
image: openproject/community:latest
deploy:
replicas: 3 # 直接定义3个实例
ports:
- "8080:80"
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_USER: openproject
POSTGRES_PASSWORD: secret
说明:
web
服务会启动 3 个实例,形成负载均衡。db
数据库不会被扩展(因为数据库通常需要集群架构)。docker swarm
进行集群扩展Docker Compose 在 单机环境 适用,而如果需要在 多个服务器上 扩展,可结合 Docker Swarm:
docker service scale openproject_web=3
使用 deploy
关键字,可以在 Docker Swarm 模式下指定副本:
services:
web:
image: openproject/community:latest
deploy:
mode: replicated
replicas: 3
多个 web
实例需要一个 反向代理(负载均衡器),常用方法:
upstream openproject_servers {
server web1:80;
server web2:80;
server web3:80;
}
server {
listen 80;
location / {
proxy_pass http://openproject_servers;
}
}
如果使用 Traefik,可以动态发现多个 web
容器:
labels:
- "traefik.http.services.openproject.loadbalancer.server.port=80"
✅ 适合扩展的组件
⚠️ 不适合直接扩展的组件
docker-compose up --scale web=3
docker swarm
📌 最佳实践:
Web 层使用 scale
扩展,数据库使用主从复制,并结合负载均衡! 🚀