docker compose V2版本新属性

105 阅读2分钟

前言

Docker Compose V2 是目前 Docker 生态中默认且推荐的编排工具版本。它不再是独立的 Python 程序,而是作为 Docker CLI 的原生插件(Go 语言编写)直接集成在 Docker 命令体系中

docker compose V2版本新属性

语法

V2 将 docker-compose(带连字符)替换为 docker compose(空格分隔的子命令)

docker compose up -d

查询版本

安装完docker compose版本之后,可以执行以下命令查看版本

docker compose version

image.png

version字段去掉

version: '3.0'
services:
 mysql:
   image: mysql:9.4.0
   container_name: mysql9
   ports:
     - "3:3306"
   volumes:
     - /home/my.cnf:/etc/my.cnf
     - ./data:/var/lib/mysql
     - ./logs:/var/log/mysql
   environment:
     MYSQL_ROOT_PASSWORD: 123456
   restart: unless-stopped
   privileged: true

V2版本可以省去version这个字段,存在的话,会输出警告

image.png

include 指令

模块化拆分多个 compose 文件(替代旧的 -f 多文件合并)

include:
  - path: ./services/db.yml
  - path: ./services/cache.yml

depends_on

depends_on 是 Docker Compose 中用于定义服务依赖关系的核心指令,它控制的是服务的启动和关闭顺序,而非服务之间的网络连通性

services:
  web:
    depends_on:
      - db
      - redis

语法可以使用

# docker-compose.yml
include:
  - path: /home/docker-compose1.yml
    env_file: /home/.env

services:
  app:
    depends_on:
      database:
        condition: saas-lock

然后执行

docker compose up -d

启动容器

docker compose watch

这是 V2 对开发者最友好的特性。它允许你定义文件变更时的自动同步策略,无需反复执行 up --build。

服务依赖条件增强 (condition)

V2 原生支持基于健康检查的启动顺序控制,不再需要 wait-for-it.sh 等外部脚本:

1services:
2  mysql9:
3    healthcheck:
4      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
5      interval: 5s
6      retries: 10
7
8  app:
9    depends_on:
10      mysql9:
11        condition: service_healthy     # ✅ 等待健康检查通过
12        required: true                 # ✅ 必需服务,失败则 app 不启动
13      redis:
14        condition: service_started     # 仅等待启动,不等健康
15        required: false                # ✅ 可选服务,redis 挂了 app 仍能启动
condition含义
service_started容器已启动(默认行为)
service_healthy健康检查通过
service_completed_successfully一次性任务成功退出(适用于 init 容器)

总结

docker compose V2版本在体验上比v1版本更可以