Docker Compose:文件格式

12/31/2025 运维容器Docker

目录


# Docker Compose:文件格式

Docker Compose的文件格式及其版本演变是容器编排技术中的重要组成部分,具体如下:


# 一、Docker Compose文件格式基础

Docker Compose使用YAML格式.yml.yaml扩展名)定义多容器应用的服务、网络和卷配置,通过该文件可实现容器编排的一键化部署。其核心结构包括:

  • services:定义容器实例及其配置(如镜像、端口、环境变量)。
  • networks:自定义容器间通信网络。
  • volumes:管理持久化数据存储。
  • 扩展字段:如x-*用于自定义扩展。

# 二、文件格式版本及其演变

Docker Compose文件格式版本(即version字段)经历了多次迭代,以下是主要版本及其特性:

文件格式版本 发布时间 Docker Compose版本要求 Docker Engine版本要求 核心特性与区别
v1 2014 Compose 1.0-1.5.x 1.9.0+ 初始版本,语法简单,但功能有限(如不支持网络和卷的自定义)。
v2 2016 Compose 1.6.0+ 1.10.0+ 引入version: '2',支持网络和卷定义、depends_on条件依赖、服务扩展(extends)。
v2.1 2017 Compose 1.14.0+ 1.13.0+ 新增healthcheck配置、支持容器重启策略(restart)、环境变量文件(env_file)。
v2.2 2018 Compose 1.19.0+ 17.06.0+ 引入runtime字段(如nvidia运行时)、支持GPU资源分配。
v2.3 2018 Compose 1.21.0+ 17.12.0+ 支持Docker Swarm模式的部分配置(如deploy字段的resources限制),但需与docker stack deploy结合使用。
v2.4 2019 Compose 1.24.0+ 18.02.0+ 新增name字段为服务命名、支持扩展字段(x-*)。
v3 2017 Compose 1.13.0+ 17.06.0+ 移除部分v2特性(如volume_driver),简化语法以兼容Swarm模式,强调deploy字段的集群配置(副本数、更新策略等)。
v3.1-v3.8 2017-2020 Compose 1.25.0+ 18.06.0+ 逐步增强Swarm兼容性,新增configssecrets管理、支持容器启动顺序控制(start_period)等。

# 三、版本选择与兼容性要点

  1. 版本弃用与推荐

    • v1:已完全弃用,仅适用于旧项目维护。
    • v2.x:适用于单机环境,功能丰富但缺乏Swarm集成。
    • v3.x:推荐用于生产环境,尤其是需要与Docker Swarm或Kubernetes集成的场景。
  2. 版本与工具的对应关系

    • Docker Compose 2.x+:支持v3文件格式,并逐步弃用v2语法。
    • Docker Engine 20.10+:支持最新的v3.8格式,需配合Compose插件(docker compose命令)。
  3. 功能差异示例

    • 网络配置:v2支持自定义网络驱动,而v3默认使用Swarm Overlay网络。
    • 资源限制:v2通过cpusmem_limit字段,v3则通过deploy.resources定义。

# 四、版本升级建议

  • 单机开发环境:使用v2.4或v3.x以获得最新功能。
  • 集群部署:必须使用v3.x以兼容Swarm/Kubernetes。
  • 历史项目:若需兼容旧版 Docker(如 <1.13.0),可选择 Version 2.12.2
  • 语法迁移工具:可通过docker-compose config命令自动转换旧版文件格式。

# 五、典型配置示例

以下是Docker Compose v3.x文件格式的典型配置示例及核心特性解析:

1. 基础服务配置示例

version: '3.8'  # 当前最新v3子版本

services:
  webapp:
    image: nginx:alpine
    ports:
      - "80:80"
    networks:
      - frontend
    volumes:
      - html_data:/usr/share/nginx/html
    environment:
      - NGINX_ENV=production
    depends_on:
      - db

  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - backend
    healthcheck:  # 新增健康检查机制
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 3s
      retries: 3

volumes:
  html_data:
  postgres_data:

networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

2. 集群部署扩展配置

services:
  worker:
    image: myapp/worker:latest
    deploy:  # Swarm/Kubernetes集群专有配置
      replicas: 3
      update_config:
        parallelism: 2
        delay: 10s
      resources:
        limits:
          cpus: '0.50'
          memory: 512M
        reservations:
          memory: 256M
    configs:  # 集中式配置管理
      - source: app_config
        target: /etc/app/config.yaml

configs:
  app_config:
    file: ./config/prod.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

3. 安全增强配置

services:
  api:
    image: myapp/api:v3
    secrets:  # 安全密钥管理
      - db_password
    environment:
      DB_PASS_FILE: /run/secrets/db_password

secrets:
  db_password:
    file: ./secrets/db_password.txt
1
2
3
4
5
6
7
8
9
10
11

关键特性说明

  1. 版本声明
    v3.x要求显式指定version: '3.x'头,推荐使用3.8(当前最高子版本),支持Swarm模式集成

  2. 集群部署指令
    deploy字段允许定义副本数、资源限制(CPU/内存)、滚动更新策略等,与docker stack deploy命令深度集成

  3. 安全增强
    新增:

    • configs:集中管理配置文件,避免容器内硬编码
    • secrets:安全注入密钥文件,运行时自动挂载至内存文件系统
    • 支持TLS加密网络定义
  4. 健康监测升级
    支持自定义健康检查命令、间隔时间和重试机制,增强服务状态监控能力

  5. 资源隔离改进
    通过resources子字段实现更精细的CPU/内存配额管理,取代旧版cpu_shares等字段

完整规范建议参考官方文档: Docker Compose v3文件规范、Swarm部署最佳实践指南

上次更新时间: 3/27/2025, 5:08:03 PM