Docker Compose 最佳实践:从开发到生产的完整指南

作为冉冉博客的运维教程系列,今天分享 Docker Compose 的实战经验。容器化部署已成为现代开发的标准配置,掌握 Compose 能让你的部署流程事半功倍。

一、Docker Compose 基础回顾

Docker Compose 通过 YAML 文件定义多容器应用,一键启动完整开发环境:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    depends_on:
      - db
      - redis
  
  db:
    image: postgres:15
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: secret
  
  redis:
    image: redis:7-alpine
    command: redis-server --requirepass mypassword

volumes:
  postgres_data:

二、开发环境 vs 生产环境配置

使用多文件覆盖策略区分环境:

# docker-compose.yml - 基础配置
services:
  web:
    build: .

# docker-compose.dev.yml - 开发环境
services:
  web:
    volumes:
      - .:/app
      - /app/node_modules
    command: npm run dev
  db:
    ports:
      - "5432:5432"

# docker-compose.prod.yml - 生产环境
services:
  web:
    restart: always
    command: npm start
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
  db:
    restart: always

启动时选择环境:

# 开发环境
docker-compose up -d

# 生产环境
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

三、健康检查与依赖管理

确保服务按正确顺序启动:

services:
  web:
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy
  
  db:
    image: postgres:15
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 5
  
  redis:
    image: redis:7-alpine
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      retries: 5

四、网络配置与服务发现

Compose 自动创建网络,容器间通过服务名通信:

services:
  web:
    networks:
      - frontend
      - backend
    labels:
      - "traefik.http.routers.web.rule=Host(api.example.com)"
  
  api:
    networks:
      - backend
  
  db:
    networks:
      - backend
    volumes:
      - db_data:/var/lib/postgresql/data

networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge
    internal: true  # 隔离网络,不访问外网

五、资源限制与性能优化

services:
  web:
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 256M
  
  db:
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 2G

六、常用命令速查

  • docker-compose up -d – 后台启动所有服务
  • docker-compose logs -f web – 查看 web 服务日志
  • docker-compose exec db psql – 进入数据库容器
  • docker-compose down -v – 停止并删除数据卷
  • docker-compose restart web – 重启 web 服务
  • docker-compose scale web=3 – 扩容 web 服务

七、生产环境注意事项

  • 使用 Docker Swarm 或 K8s 进行 orchestration
  • 配置日志轮转,防止磁盘占满
  • 设置资源限制,避免单容器耗尽主机资源
  • 使用 healthcheck 确保服务可用性
  • 敏感信息使用 Docker Secrets 或环境变量
  • 定期备份数据卷

Docker Compose 是容器化部署的利器,掌握这些最佳实践能让你在开发和生产环境都游刃有余。更多运维干货,欢迎持续关注冉冉博客。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容