全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-05-21 5 分钟 ✍️ juanwangdev

多环境配置管理

不同环境需要不同配置,Compose 支持配置文件覆盖实现多环境部署。

基础配置

YAML
# docker-compose.yml(开发环境)
version: '3.8'

services:
  app:
    build: .
    environment:
      NODE_ENV: development
      LOG_LEVEL: debug
    ports:
      - "3000:3000"

  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: dev_password

环境覆盖

生产环境覆盖

YAML
# docker-compose.prod.yml
version: '3.8'

services:
  app:
    image: my-app:prod  # 使用预构建镜像
    environment:
      NODE_ENV: production
      LOG_LEVEL: error
    ports: []  # 不暴露端口(使用反向代理)
    deploy:
      replicas: 3
      resources:
        limits:
          memory: 512M

  db:
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}  # 从环境变量读取
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:

使用方式

Bash
# 开发环境
docker compose up -d

# 生产环境(覆盖配置)
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

测试环境

YAML
# docker-compose.test.yml
version: '3.8'

services:
  app:
    build: .
    environment:
      NODE_ENV: test
      DB_HOST: test-db
    depends_on:
      - test-db

  test-db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: test_password
Bash
# 测试环境
docker compose -f docker-compose.yml -f docker-compose.test.yml up -d

环境变量管理

Bash
# .env.development
DB_PASSWORD=dev_password
LOG_LEVEL=debug

# .env.production
DB_PASSWORD=${VAULT_DB_PASSWORD}
LOG_LEVEL=error

# 使用
docker compose --env-file .env.production up -d

CI/CD 集成

YAML
# GitHub Actions
- name: Deploy
  run: |
        docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
  env:
    DB_PASSWORD: ${{ secrets.DB_PASSWORD }}

要点总结

  • 基础配置 docker-compose.yml,环境覆盖 docker-compose.<env>.yml
  • 使用 -f 参数组合多个配置文件,后面的覆盖前面的
  • 生产环境使用预构建镜像,开发环境 build
  • 敏感信息通过环境变量传入,不要硬编码
  • CI/CD 通过 secrets 注入环境变量
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 Docker in Docker
下一篇 → 容器化测试环境
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码