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

14,221 阅读2分钟

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版本:

docker-compose version

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

version: "3.9"
services:
  ...

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

实践

[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 支持的最高版本。

例如:

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 字段值。