docker-compose v2 简介
https://docs.docker.com/compose/migrate/
一、简介
自2023年7月,Compose V1 就停止接受更新了。
Compose V2 发布于 2020 年,当前所有的 docker desktop 都支持。它提供了改进了 CLI 体验,提升了 BuildKit 的编译性能,以及持续的新功能开发。
二、在 linux 上安装 Compose V2
1. 仓库安装
- 安装
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
or
sudo yum update
sudo yum install docker-compose-plugin
- 测试
docker compose version
2. 手动安装
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
三、Compose V1 跟 Compose V2 的不同
1. docker-compose vs docker compose
不同于V1,V2 集成到了命令行,推荐的语法是 docker compose
。
Docker 命令行提供了一些参数和标签,比如: DOCKER_HOST
环境变量、--context
命令行标签。
这种变化使得可以在 root docker
命令使用所有的共享标签。比如:docker --log-level=debug --tls compose up
开启 debug 日志,开启 tls 支持。
2. Service container names
Compose 生成的容器名基于 project name、 service name 和 scale/replica count。
在Compose V1, 下划线 (_
) 作为单词分隔符。在Compose V2,中横线 (-
) 作为单词分隔符。
下划线在DNS hostname中是不合法字符。通过使用中横线,Compose V2 确保容器可以通过hostname访问到。
比如:Compose 命令 -p myproject up --scale=1 svc
,在Compose V1的结果是 myproject_svc_1
,在Compose V2的结果是 myproject-svc-1
。
注意:
在 Compose V2 中,--compatibility
全局标签 orCOMPOSE_COMPATIBILITY
环境变量保留了 Compose V1操作,可以使用下划线(_)作为单词分隔符。由于必须为每次运行Compose V2命令指定此选项,因此建议您在转换到Compose V2时仅将其用作临时措施。
3. Command-line flags and subcommands
Compose V2几乎支持所有Compose V1的标签和子命令,因此在大多数情况下,脚本中可插拔式替换。
V2 不支持的操作
-
docker-compose scale
,替换为docker compose up --scale
docker-compose rm --all
V2 的不同处
Compose V1 | Compose V2 | |
---|---|---|
--compatibility | Deprecated. Migrates YAML fields based on legacy schema version. | Uses _ as word separator for container names instead of - to match V1. |
ps --filter KEY-VALUE | Undocumented. Allows filtering by arbitrary service properties. | Only allows filtering by specific properties, e.g. --filter=status=running . |
4. 环境变量
Compose V1中的环境变量行为没有正式记录,在某些边缘案例中表现不一致。
对于Compose V2,环境变量涵盖了优先级
和.env
文件,还包括许多棘手的情况,如 转义嵌套引号。
参考:https://docs.docker.com/compose/environment-variables/env-file/