Compose 生产实践
本文档介绍在生产环境中使用 Docker Compose 的最佳实践。
使用 Compose V3
生产环境应该使用 Compose V3,并配置 deploy 选项:
yaml
version: '3.8'
services:
web:
image: myapp:latest
deploy:
replicas: 3
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s注意
deploy 配置仅在 Docker Swarm 模式下生效。单机环境需要使用其他方式部署。
镜像标签管理
使用具体版本标签
yaml
# ❌ 不推荐
image: nginx:latest
# ✅ 推荐
image: nginx:1.25.3使用摘要 (Digest)
yaml
# ✅ 最安全
image: nginx@sha256:abc123...资源限制
始终设置资源限制:
yaml
services:
web:
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M健康检查
配置健康检查确保服务正常:
yaml
services:
web:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s日志管理
配置日志驱动和轮转:
yaml
services:
web:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"网络隔离
使用自定义网络隔离服务:
yaml
services:
web:
networks:
- frontend
api:
networks:
- frontend
- backend
db:
networks:
- backend
networks:
frontend:
driver: overlay
backend:
driver: overlay
internal: true # 禁止外部访问数据持久化
使用命名卷持久化数据:
yaml
services:
db:
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
driver: local密钥管理
使用 Docker Secrets 管理敏感信息:
yaml
version: '3.8'
services:
web:
secrets:
- db_password
environment:
- DB_PASSWORD_FILE=/run/secrets/db_password
secrets:
db_password:
external: true监控和告警
集成监控系统:
yaml
services:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"备份策略
定期备份卷数据:
sh
#!/bin/bash
# backup.sh
docker run --rm \
-v myapp_db_data:/data \
-v $(pwd):/backup \
alpine tar czf /backup/db_backup_$(date +%Y%m%d).tar.gz /data安全检查清单
- [ ] 使用非 root 用户运行容器
- [ ] 设置资源限制
- [ ] 配置健康检查
- [ ] 使用具体版本标签
- [ ] 配置日志轮转
- [ ] 网络隔离
- [ ] 密钥管理
- [ ] 定期备份
- [ ] 监控和告警
BSFC Tech Pro Tip
生产环境部署前,建议进行压力测试和故障演练,确保系统稳定可靠。