# docker-compose.yml 示例
version: '3.8'
services:
webapp:
image: your-webapp-image
deploy:
replicas: 3 # 设置初始副本数
ports:
- "8080:80"
扩展命令:
docker-compose up -d --scale webapp=5 # 将webapp服务扩展到5个实例
# 初始化Swarm集群
docker swarm init
# 部署服务并设置副本数
docker service create --name webapp --replicas 3 -p 8080:80 your-webapp-image
# 扩展服务
docker service scale webapp=5
# nginx.conf 配置示例
upstream docker_webapp {
server webapp1:80;
server webapp2:80;
server webapp3:80;
}
server {
listen 80;
location / {
proxy_pass http://docker_webapp;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
docker service create --name webapp \
--replicas 3 \
--publish published=8080,target=80 \
--endpoint-mode vip \ # 使用虚拟IP进行负载均衡
your-webapp-image
# docker-compose.yml with Traefik
version: '3.8'
services:
traefik:
image: traefik:v2.5
command:
- --api.insecure=true
- --providers.docker
ports:
- "80:80"
- "8080:8080" # Traefik dashboard
volumes:
- /var/run/docker.sock:/var/run/docker.sock
webapp:
image: your-webapp-image
deploy:
replicas: 3
labels:
- "traefik.http.routers.webapp.rule=Host(`yourdomain.com`)"
使用Docker Swarm与Prometheus、cAdvisor和Alertmanager集成:
docker service scale
# 示例使用auto-scaling脚本
#!/bin/bash
SERVICE_NAME=webapp
MAX_REPLICAS=10
CPU_THRESHOLD=70
current_cpu=$(docker stats --no-stream --format "{{.CPUPerc}}" | grep -oE '[0-9]+' | head -n 1)
current_replicas=$(docker service inspect --format '{{.Spec.Mode.Replicated.Replicas}}' $SERVICE_NAME)
if [ $current_cpu -gt $CPU_THRESHOLD ] && [ $current_replicas -lt $MAX_REPLICAS ]; then
docker service scale ${SERVICE_NAME}=$(($current_replicas+1))
fi
yaml
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
timeout: 10s
retries: 3
nginx
upstream docker_webapp {
ip_hash; # Nginx的IP哈希策略
server webapp1:80;
server webapp2:80;
}
bash
docker network create --driver overlay my_overlay_net
yaml
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
通过以上方法,您可以有效地实现Docker容器的水平扩展和负载均衡,构建高可用、可扩展的应用架构。