Docker容器的水平伸缩通常通过以下方式实现:
# 初始化Swarm (在主节点执行)
docker swarm init --advertise-addr <MANAGER-IP>
# 加入工作节点 (在工作节点执行)
docker swarm join --token <TOKEN> <MANAGER-IP>:2377
# 创建服务并指定副本数量
docker service create --name web --replicas 3 -p 80:80 nginx
# 扩展服务实例数量
docker service scale web=5
# 缩减服务实例数量
docker service scale web=2
Swarm内置的负载均衡器会自动将请求分发到各个容器实例。Swarm使用Ingress负载均衡和DNS轮询两种方式:
version: '3.8'
services:
web:
image: nginx
deploy:
replicas: 3
resources:
limits:
cpus: '0.5'
memory: 512M
ports:
- "80:80"
部署命令:
docker stack deploy -c docker-compose.yml myapp
对于生产环境,可以结合Nginx、HAProxy等专业负载均衡器:
upstream backend {
server docker-host1:80;
server docker-host2:80;
server docker-host3:80;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
结合监控工具实现自动伸缩:
基于CPU/内存使用率:
docker service update --limit-cpu 0.5 --limit-memory 512M web
结合Prometheus + cAdvisor + Alertmanager监控体系
使用Docker API编写自定义伸缩脚本
yaml
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
滚动更新:使用滚动更新策略避免服务中断
docker service update --image nginx:new --update-parallelism 2 --update-delay 10s web
资源限制:为容器设置合理的资源限制
通过以上方法,您可以有效地实现Docker容器的水平伸缩和负载均衡,构建高可用、可扩展的应用架构。