Docker Compose基本结构

Docker Compose 文件采用 YAML 格式,核心字段包括 version、services、networks 和 volumes。以下是一个基础模板:

version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: example

定义服务与容器配置

每个服务在 services 下声明,支持以下常见配置项:

  • image:指定容器镜像(如 redis:alpine)。
  • build:通过本地 Dockerfile 构建镜像(需指定 context 路径)。
  • ports:映射主机端口到容器端口(格式为 "HOST:CONTAINER")。
  • environment:设置环境变量(支持键值对或列表)。
  • volumes:挂载主机目录或命名卷到容器路径。

示例:

services:
  app:
    build: ./app
    ports:
      - "5000:5000"
    environment:
      FLASK_ENV: development
    volumes:
      - ./app:/code

网络与存储配置

  • 网络:默认创建 bridge 网络,可通过 networks 自定义。
    networks:
      app_network:
        driver: bridge
    

  • 存储卷:使用 volumes 声明持久化数据。
    volumes:
      db_data: {}
    

依赖与健康检查

  • depends_on:控制服务启动顺序(不等待容器就绪)。
  • healthcheck:定义容器健康状态检测逻辑。
    services:
      redis:
        image: redis
        healthcheck:
          test: ["CMD", "redis-cli", "ping"]
          interval: 5s
    

多环境配置扩展

通过 docker-compose.override.yml 覆盖或扩展配置。例如开发环境启用调试工具:

# docker-compose.override.yml
services:
  web:
    volumes:
      - ./debug-tools:/tools

资源限制与部署

  • deploy:指定资源限制(仅 Swarm 模式生效)。
    services:
      worker:
        deploy:
          resources:
            limits:
              cpus: '0.5'
              memory: 512M
    

变量与模板复用

使用 .env 文件或 ${VARIABLE} 语法实现动态配置:

services:
  db:
    image: postgres:${POSTGRES_VERSION}

对应的 .env 文件:

POSTGRES_VERSION=13

最佳实践建议

  • 优先使用 docker-compose config 验证文件语法。
  • 避免硬编码敏感信息,通过 secrets 或环境变量管理。
  • 为生产环境添加 restart_policy 确保服务高可用。
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐