关于docker-composer的版本和docker-compose.yml里version的理解

关于docker-composer的版本和docker-compose.yml里version的理解

OTbeijing

2023-04-20 12:221623

docker-compose 有哪些版本,和docker-compose.yml里的version有什么样的对应关系?

Docker Compose 是一个用于管理 Docker 应用程序的工具,它允许你使用 YAML 文件来定义应用程序的服务、网络和卷等内容,并在单个主机或多个主机上进行部署。Docker Compose 有以下版本:

  • v1:这是最早的版本,支持基本功能,如构建镜像、启动容器、设置环境变量等。
  • v2.x:增加了对Swarm模式的支持,可以通过docker stack命令将Compose文件部署到Swarm集群中。
  • v3.x:引入了一些新特性,例如配置命名空间、healthcheck检查、秘密管理等。同时也提供了对Kubernetes的支持。

docker-compose.yml 文件中指定的version必须与安装在主机上的Docker Compose版本相匹配。如果使用不同版本之间的兼容性问题,则可能会导致意外行为或错误。通常情况下,使用最新版本的Docker Compose是最好的选择,因为它包含最新的特性和修复了已知的漏洞。你可以通过运行以下命令来检查所安装的Docker Compose版本:

1
复制代码docker-compose version

然后,在docker-compose.yml文件中指定适当的版本号,例如:

1
2
3
yaml复制代码version: "3.9"
services:
...

总之,Docker Compose有几个版本,每个版本都提供了不同的特性和兼容性。在编写docker-compose.yml文件时,请确保所指定的version与主机上安装的Docker Compose版本相匹配,以避免任何问题。

实践

1
2
3
4
5
js复制代码[root@VM-4-14-opencloudos ~]# docker-compose version  
docker-compose version 1.28.6, build 5db8d86f
docker-py version: 4.4.4
CPython version: 3.7.10
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019

根据现在使用的 Docker Compose 版本是 1.28.6,因此建议在 docker-compose.yml 文件中将 version 字段设置为 “3.8”。这个版本号对应着 Docker Engine API 的 1.38 版本,是 Docker Compose 1.28.6 支持的最高版本。

例如:

1
2
3
4
5
6
yaml复制代码version: '3.8'
services:
app:
image: myapp:latest
ports:
- "80:80"

需要注意的是,如果你升级了 Docker Compose 到新的版本(比如说 1.29.2),那么就需要相应地调整 version 字段的值。具体哪个版本对应哪个版本号可以查看 Docker 官方文档。

附录:version和Docker Compose 版本对应关系的数据

以下是 Docker Compose 版本和 version 字段对应关系的数据:

Docker Compose 版本 version 字段
1.0.x ‘1’
1.1.x ‘2’
1.2.x ‘2.1’
1.3.x ‘2.1’
1.4.x ‘2.1’
1.5.x ‘2.1’
1.6.x ‘2.1’
1.7.x ‘2.1’
1.8.x - 1.10.x ‘2.1’
1.11.x ‘2.1’ 或 ‘2.2’(取决于特性使用)
1.12.x - 1.13.x ‘2.1’ 或 ‘2.2’(取决于特性使用)
1.14.x ‘2.1’ 或 ‘2.3’(取决于特性使用)
1.15.x ‘2.1’ 或 ‘2.3’(取决于特性使用)
1.16.x - 1.17.x ‘2.1’ 或 ‘2.3’(取决于特性使用)
1.18.x ‘2.1’ 或 ‘2.4’(取决于特性使用)
1.19.x ‘3.0’
1.20.x ‘3.0’
1.21.x ‘3.0’
1.22.x ‘3.0’
1.23.x ‘3.0’
1.24.x - 1.27.x ‘3.0’
1.28.x ‘3.7’ 或 ‘3.8’(取决于特性使用)
1.29.x ‘3.7’ 或 ‘3.8’(取决于特性使用)

需要注意的是,这些对应关系只是一般规则,并不绝对。在实际使用中,你还需结合自己的 Docker Compose 版本以及所使用的特性来确定正确的 version 字段值。