Skip to content

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

生产环境部署前,建议进行压力测试和故障演练,确保系统稳定可靠。


由 BSFC Tech 提供技术支持