Docker compose 多环境配置 dev prod 文件怎么管理

文章导读
管理 Docker Compose 多环境配置,核心在于维护一份基础配置文件,再针对不同环境编写覆盖文件,启动时通过命令行参数组合。这种方式既能复用通用配置,又能隔离环境差异。
📋 目录
  1. 核心配置策略
  2. 安全与版本控制
  3. CI/CD 集成实践
  4. 验证与排查
A A

管理 Docker Compose 多环境配置,核心在于维护一份基础配置文件,再针对不同环境编写覆盖文件,启动时通过命令行参数组合。这种方式既能复用通用配置,又能隔离环境差异。

核心结论:采用“基础文件 + 环境覆盖文件”模式,配合严格的 .env 安全管理策略。

  • 适用场景:开发、测试、生产环境配置差异明显,且需频繁切换
  • 关键准备:基础 docker-compose.yml 与环境覆盖文件(如 docker-compose.prod.yml),以及 .gitignore 配置
  • 验收标准:使用 config 命令检查合并配置,确认敏感信息未泄露且参数符合预期

核心配置策略

Docker Compose 支持多文件合并机制,后加载的文件会覆盖先加载文件中的同名字段。通用服务定义放在基础文件中,环境特定参数(如端口、环境变量、重启策略)放在覆盖文件中。

1. 创建基础配置文件
新建 docker-compose.yml,定义所有环境共享的服务框架。建议使用 version: '3.8',该版本支持 healthcheck 等现代指令。

version: '3.8'
services:
  webapp:
    image: myapp:${APP_VERSION:-latest}
    ports:
      - "8080:8080"
    environment:
      - DATABASE_URL=postgres://${DB_USER}:${DB_PASSWORD}@db:5432/${DB_NAME}

2. 创建环境覆盖文件
生产环境文件 docker-compose.prod.yml 用于覆盖特定参数。注意:普通 docker compose up 不支持 deploy.replicas,该字段仅在 Swarm 模式生效,生产扩容建议使用 profiles 或单独维护文件。

version: '3.8'
services:
  webapp:
    restart: always
    environment:
      - DEBUG=false
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

3. 启动命令

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

# 启动开发环境(默认自动加载 docker-compose.override.yml)
docker compose up -d

安全与版本控制

环境变量文件包含敏感信息,必须纳入版本控制的安全管理中。

1. 配置 .gitignore
确保 .env 文件不被提交到代码仓库,防止密钥泄露。

Docker compose 多环境配置 dev prod 文件怎么管理
# .gitignore 示例
.env
*.env
! .env.example

2. 敏感信息管理
创建 .env.example 作为模板提交,实际 .env 文件由运维人员在服务器生成。对于高安全需求场景,建议使用 Docker Secrets 或外部密钥管理服务(如 Vault),避免明文存储在环境变量中。

# .env.example 模板
DB_USER=admin
DB_PASSWORD=your_password_here
APP_VERSION=1.0.0

CI/CD 集成实践

在流水线中调用多环境配置时,需确保环境变量正确注入。

GitLab CI 示例:

deploy_prod:
  stage: deploy
  script:
    - docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
  environment:
    name: production
  only:
    - main

注意:CI 流水线中的敏感变量应在平台设置中配置为 Protected/Masked Variables,而不是硬编码在 yaml 文件中。

验证与排查

1. 检查合并配置
在启动前,使用 config 命令查看最终生效的配置,确认覆盖文件已正确合并且无语法错误。

docker compose -f docker-compose.yml -f docker-compose.prod.yml config

2. 检查服务状态
启动后,查看容器运行状态和健康检查情况。

docker compose ps
docker compose logs webapp

3. 常见坑

  • 变量优先级:命令行传入 > 服务 environment 字段 > .env 文件 > 系统环境变量。确保敏感信息不在低优先级文件中泄露。
  • 路径映射:覆盖文件中的卷挂载路径是相对于执行命令的目录。生产环境通常不需要挂载本地代码目录,避免误操作。
  • 文件加载顺序:命令行中 -f 参数的顺序决定了覆盖优先级,最后一个文件的配置优先级最高。务必确认生产配置文件放在最后。