在线文档教程
Docker 17
撰写 | Compose

关于版本和升级 | About versions and upgrading (Compose)

撰写文件版本并升级

Compose文件是一个定义Docker应用程序的服务,网络和卷的YAML文件。

现在在这些参考文献中描述了撰写文件格式,这些文件格式针对每个版本。

参考文件在这个版本中改变了什么
版本3(最新,推荐)版本3更新
版本2版本2更新
版本1版本1更新

下面的主题解释了版本之间的差异,Docker Engine兼容性以及如何升级。

兼容性矩阵

有几种版本的Compose文件格式 - 1,2,2.x和3.x

此表显示哪些Compose文件版本支持特定的Docker版本。

Compose file formatDocker Engine release
3.317.06.0+
3.217.04.0+
3.11.13.1+
3.01.13.0+
2.317.06.0+
2.21.13.0+
2.11.12.0+
2.01.10.0+
1.01.9.1.+

除了表格中显示的Compose文件格式版本外,Compose本身的发布时间表也如发布版本中所示,但文件格式版本并不一定随每个发行版而增加。例如,Compose文件格式3.0首先在Compose版本1.10.0中引入,并在随后的版本中逐步版本化。

在Docker和Compose兼容性上寻找更多细节?我们建议尽可能保持最新的版本。但是,如果您使用的是较旧版本的Docker,并且想要确定哪个Compose版本兼容,请参阅撰写发行说明。每套发行说明都详细介绍了哪些版本的Docker Engine受支持,以及兼容的Compose文件格式版本。(另见#3404号讨论。)

有关版本和如何升级的详细信息,请参阅版本控制和升级。

版本

目前有三种版本的Compose文件格式:

  • 版本1,传统格式。这是通过省略versionYAML根部的一个键来指定的。

兼容性矩阵显示映射到Docker Engine发行版的Compose文件版本。

要将项目移到更高版本,请参阅升级部分。

注意:如果您使用多个Compose文件或扩展服务,则每个文件的版本必须相同 - 例如,不能在单个项目中混合使用版本1和版本2。

根据您使用的版本,有几件事情会有所不同:

  • 结构和允许的配置键

下面将解释这些差异。

版本1

撰写不声明版本的文件被认为是“版本1”。在这些文件中,所有服务都是在文档的根部声明的。

版本1是支持撰写高达1.6.x版。它将在未来的Compose版本中被弃用。

版本1文件不能声明命名卷,网络或构建参数。

使用版本1时,Compose不利用网络:每个容器都放置在默认bridge网络上,并且可以通过其IP地址上的每个其他容器进行访问。您将需要使用链接来启用容器之间的发现。

例:

web: build: . ports: - "5000:5000" volumes: - .:/code links: - redis redis: image: redis

版本2

使用版本2语法撰写文件必须在文档的根目录中指明版本号。所有服务必须在services密钥下声明。

版本2文件由Compose 1.6.0+支持,并且需要版本为1.10.0+的Docker引擎。

命名卷可以在volumes密钥下声明,网络可以在networks密钥下声明。

默认情况下,每个容器都加入一个应用程序范围的默认网络,并且可以在与服务名称相同的主机名上发现。这意味着链接很不必要。有关更多详细信息,请参阅撰写中的联网。

简单的例子:

version: '2' services: web: build: . ports: - "5000:5000" volumes: - .:/code redis: image: redis

一个更广泛的例子,定义卷和网络:

version: '2' services: web: build: . ports: - "5000:5000" volumes: - .:/code networks: - front-tier - back-tier redis: image: redis volumes: - redis-data:/var/lib/redis networks: - back-tier volumes: redis-data: driver: local networks: front-tier: driver: bridge back-tier: driver: bridge

添加了其他几个选项来支持联网,例如:

  • aliases

版本2中也添加了变量替换。

版本2.1

引入仅在Docker引擎版本1.12.0以上提供的新参数的版本2的升级。Compose 1.9.0+支持版本2.1文件。

引入以下附加参数:

  • link_local_ips

版本2.2

2.1版本的升级引入了仅在Docker Engine版本1.13.0+中可用的新参数。Compose 1.13.0+支持版本2.2文件。该版本还允许您指定服务配置中的默认缩放编号。

引入以下附加参数:

  • init

版本2.3

2.2版的升级引入了仅在Docker Engine版本17.06.0以上版本中提供的新参数。Compose 1.16.0+支持版本2.3文件。

引入以下附加参数:

  • target 用于构建配置

版本3

为了在Compose和Docker Engine的swarm模式之间交叉兼容,版本3删除了几个选项并添加了更多选项。

  • 删除:volume_drivervolumes_fromcpu_sharescpu_quotacpusetmem_limitmemswap_limitextendsgroup_add。请参阅升级指南以了解如何迁移这些指南。(有关更多信息extends,请参阅扩展服务。)

版本3.3

引入仅适用于Docker Engine 17.06.0及更高版本的新参数的版本3的升级。

引入以下附加参数:

  • 建立 labels

升级

版本2.x到3.x

在版本2.x和3.x之间,撰写文件的结构是相同的,但是几个选项已被删除:

  • volume_driver:不是在服务上设置卷驱动,而是使用顶层volumes选项定义卷并在那里指定驱动。版本:“3”服务:db:image:postgres卷: - data:/ var / lib / postgresql / data卷:data:驱动程序:mydriver

版本1到2.x

在大多数情况下,从版本1移动到2是一个非常简单的过程:

  • 将整个文件缩进一层,并services:在顶部放置一个键。

如果您使用特定的配置功能,则会更加复杂:

  • dockerfile:现在生活在build关键之下:build:context:。dockerfile:Dockerfile-alternate

撰写文件格式参考

  • 撰写文件版本3