在 Docker Compose 中,version
字段用于指定 docker-compose.yml
文件的版本格式。不同版本定义了不同的功能和语法,因此 version
决定了你能够使用哪些特性和指令。
常见的 Compose 文件版本
-
Version 1:
- 不需要明确指定
version
字段。 - 只支持最基础的功能,配置文件中的所有服务都以顶级键的形式定义(没有
services
字段)。 - 已过时,不建议使用。
- 不需要明确指定
-
Version 2:
- 增加了更多高级功能,如容器的资源限制(如 CPU 和内存),以及容器之间的依赖管理。
services
是一个顶级键,所有服务都需要放在services
下面。- 支持更丰富的网络和卷配置。
- 适用于 Docker 1.10 及以上版本。
-
Version 3:
- 引入了 Swarm 模式支持,适用于 Docker 1.13 及以上版本。
- 允许使用 Docker Swarm 编排容器,支持跨主机的集群部署。
- 增加了滚动更新、服务扩展等功能。
- 适用于在生产环境中使用 Docker Swarm 集群部署的场景。
version
的具体作用
version
的值可以是 2
, 2.1
, 3
, 3.8
等,每个版本会引入新功能和变化:
2.x
版本:添加了对定义容器依赖、资源限制、网络和卷配置的支持,主要适用于单机环境,允许在 Docker Compose 中定义较复杂的服务配置。3.x
版本:增加了对 Docker Swarm 集群的支持,重点在于跨主机集群管理,同时保留了单机环境的基本功能。
示例
version: '3.8'
services:
web:
image: nginx
ports:
- "80:80"
db:
image: postgres
environment:
POSTGRES_PASSWORD: example
在这个示例中,version: '3.8'
指定了使用 Docker Compose 3.8 版本的语法和功能,允许你使用 3.x 版本中的功能,比如服务扩展、网络配置等。
为什么 version
很重要?
-
兼容性:不同的 Docker Compose 版本与不同的 Docker 版本兼容。如果你使用的 Docker 版本较低,某些高级功能(例如 Swarm 支持)可能无法使用。
-
功能支持 :指定版本后,Docker Compose 会根据该版本提供相应的功能和语法支持。例如,
version: '3'
支持在 Swarm 模式下运行,而version: '2'
更适合单机部署场景。
因此,合理选择 version
取决于你的 Docker 环境和需要的功能。