在
docker-compose.yml
文件的第一行,我们指定一个版本:
version: '3.9'
这到底是什么意思?!
安装最新版本后,我在 Windows 10 中尝试了以下操作
cmd
:
docker-compose --version
输出是:
Docker Compose version v2.17.2
那么我们如何在第一行输入
3.9
?!
该特定行意味着您正在使用新的 Compose 插件版本,该版本会忽略
version:
行。
Compose 工具有两种不同的实现,一种是用 Python 编写的(
docker-compose
,带有连字符),另一种是用 Go 编写并作为 Docker 扩展分发(docker compose
,带有空格)。 您的输出 Docker Compose version v2...
表示您正在使用较新的 Go 插件版本的 Compose。
另外,Compose 文件格式有四种不同版本:
版本 |
|
支持 | Python 编写 | 插件撰写 |
---|---|---|---|---|
1 | 缺席 | Docker 之前的网络 | 是 | |
2 | ,通过
|
单主机 Docker | 是 | 是 |
3 | ,通过
|
Docker 群 | 是 | 是 |
规格 | 被忽略 | 仅限插件撰写 | 是 |
特别是,请参阅Compose 文件版本和升级:从来没有
version: '3.9'
,这意味着 Python 版本的 Compose 将拒绝该文件。 Compose 的插件版本使用 Compose 规范格式,该格式主要向后兼容版本 2 和版本 3 格式。
版本 2 和 3 有一些细微的差异,特别是在资源限制方面,其中版本 2 通常直接镜像
docker run
选项,而版本 3 有一些与 Swarm 兼容的选项,但如果您不使用它,则会被忽略。
我个人的做法通常是使用
version: '3.8'
,这是两种 Compose 实现都支持的最新版本的文件格式。 如果我需要资源限制,那么我将使用 version: '2.4'
来代替(我不使用 Swarm)。 如果我要编写一些使用 Compose 规范特定功能的内容,那么我可能会写 version: '4'
来指示差异;我在其他地方的经验是这些类型的版本标记往往很有用。
截至 2023 年 5 月撰写本文时,Docker 计划在 2023 年 6 月底之前停止支持 Python 版本的 Compose,这将减少此矩阵中的选项数量。 特别是,这意味着
version:
行始终被忽略,并且任何文件都将根据 Compose 规范进行解释,而不是旧的文件格式之一。
顶级 version 属性由向后兼容性规范定义,但仅提供信息(https://docs.docker.com/compose/compose-file/04-version-and-name/)
向后兼容性可用于保留旧软件,否则当制造商决定停止支持旧硬件时,这些软件可能会丢失(https://en.wikipedia.org/wiki/Backward_compatibility)。
https://docs.docker.com/compose/compose-file/04-version-and-name/
顶级版本属性由规范定义以实现向后兼容性,但仅提供信息。
它指定 compose 文件架构的版本,而不是 docker-compose 的版本。
是dockercomposeryalm文件格式的版本。 每个版本都依赖于 Docker Engine 版本,它可以添加新参数或新变量。
在这里您可以看到它是如何变化的:https://docs.docker.com/compose/compose-file/compose-versioning/#version-3
我发现这也很令人困惑,但幸运的是我们似乎不再需要担心 --
最近的 docker 文档提到它废弃了“版本顶级元素”。 https://docs.docker.com/reference/compose-file/version-and-name/
这意味着我们不需要在撰写文件的开头指定“版本”。相反,如果您使用的是更高版本的 Docker 并在 yaml 中指定“version”元素,终端中会弹出一条警告消息,要求您不要这样做。