Docker Compose:文件格式
accttodo 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兼容性,新增configs 和secrets 管理、支持容器启动顺序控制(start_period )等。 |
# 三、版本选择与兼容性要点
版本弃用与推荐:
- v1:已完全弃用,仅适用于旧项目维护。
- v2.x:适用于单机环境,功能丰富但缺乏Swarm集成。
- v3.x:推荐用于生产环境,尤其是需要与Docker Swarm或Kubernetes集成的场景。
版本与工具的对应关系:
- Docker Compose 2.x+:支持v3文件格式,并逐步弃用v2语法。
- Docker Engine 20.10+:支持最新的v3.8格式,需配合Compose插件(
docker compose
命令)。
功能差异示例:
- 网络配置:v2支持自定义网络驱动,而v3默认使用Swarm Overlay网络。
- 资源限制:v2通过
cpus
和mem_limit
字段,v3则通过deploy.resources
定义。
# 四、版本升级建议
- 单机开发环境:使用v2.4或v3.x以获得最新功能。
- 集群部署:必须使用v3.x以兼容Swarm/Kubernetes。
- 历史项目:若需兼容旧版 Docker(如 <1.13.0),可选择 Version 2.1 或 2.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
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
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
2
3
4
5
6
7
8
9
10
11
关键特性说明
版本声明
v3.x要求显式指定version: '3.x'
头,推荐使用3.8(当前最高子版本),支持Swarm模式集成集群部署指令
deploy
字段允许定义副本数、资源限制(CPU/内存)、滚动更新策略等,与docker stack deploy
命令深度集成安全增强
新增:configs
:集中管理配置文件,避免容器内硬编码secrets
:安全注入密钥文件,运行时自动挂载至内存文件系统- 支持TLS加密网络定义
健康监测升级
支持自定义健康检查命令、间隔时间和重试机制,增强服务状态监控能力资源隔离改进
通过resources
子字段实现更精细的CPU/内存配额管理,取代旧版cpu_shares
等字段
完整规范建议参考官方文档: Docker Compose v3文件规范、Swarm部署最佳实践指南