?
This document uses PHP Chinese website manual Release
Compose文件是一個(gè)定義Docker應(yīng)用程序的服務(wù),網(wǎng)絡(luò)和卷的YAML文件。
現(xiàn)在在這些參考文獻(xiàn)中描述了撰寫文件格式,這些文件格式針對(duì)每個(gè)版本。
參考文件 | 在這個(gè)版本中改變了什么 |
---|---|
版本3(最新,推薦) | 版本3更新 |
版本2 | 版本2更新 |
版本1 | 版本1更新 |
下面的主題解釋了版本之間的差異,Docker Engine兼容性以及如何升級(jí)。
有幾種版本的Compose文件格式 - 1,2,2.x和3.x
此表顯示哪些Compose文件版本支持特定的Docker版本。
Compose file format | Docker Engine release |
---|---|
3.3 | 17.06.0+ |
3.2 | 17.04.0+ |
3.1 | 1.13.1+ |
3.0 | 1.13.0+ |
2.3 | 17.06.0+ |
2.2 | 1.13.0+ |
2.1 | 1.12.0+ |
2.0 | 1.10.0+ |
1.0 | 1.9.1.+ |
除了表格中顯示的Compose文件格式版本外,Compose本身的發(fā)布時(shí)間表也如發(fā)布版本中所示,但文件格式版本并不一定隨每個(gè)發(fā)行版而增加。例如,Compose文件格式3.0首先在Compose版本1.10.0中引入,并在隨后的版本中逐步版本化。
在Docker和Compose兼容性上尋找更多細(xì)節(jié)?我們建議盡可能保持最新的版本。但是,如果您使用的是較舊版本的Docker,并且想要確定哪個(gè)Compose版本兼容,請(qǐng)參閱撰寫發(fā)行說明。每套發(fā)行說明都詳細(xì)介紹了哪些版本的Docker Engine受支持,以及兼容的Compose文件格式版本。(另見#3404號(hào)討論。)
有關(guān)版本和如何升級(jí)的詳細(xì)信息,請(qǐng)參閱版本控制和升級(jí)。
目前有三種版本的Compose文件格式:
版本1,傳統(tǒng)格式。這是通過省略version
YAML根部的一個(gè)鍵來指定的。
版本2.x. 這是通過YAML根部的一個(gè)version: '2'
或者version: '2.1'
等等條目指定的。
版本3.x是最新和推薦的版本,旨在在Compose和Docker Engine的swarm模式之間交叉兼容。這是通過YAML根部的一個(gè)version: '3'
或者version: '3.1'
等等條目指定的。
兼容性矩陣顯示映射到Docker Engine發(fā)行版的Compose文件版本。
要將項(xiàng)目移到更高版本,請(qǐng)參閱升級(jí)部分。
注意:如果您使用多個(gè)Compose文件或擴(kuò)展服務(wù),則每個(gè)文件的版本必須相同 - 例如,不能在單個(gè)項(xiàng)目中混合使用版本1和版本2。
根據(jù)您使用的版本,有幾件事情會(huì)有所不同:
結(jié)構(gòu)和允許的配置鍵
您必須運(yùn)行的最低Docker引擎版本
撰寫關(guān)于網(wǎng)絡(luò)的行為
下面將解釋這些差異。
撰寫不聲明版本的文件被認(rèn)為是“版本1”。在這些文件中,所有服務(wù)都是在文檔的根部聲明的。
版本1是支持撰寫高達(dá)1.6.x版。它將在未來的Compose版本中被棄用。
版本1文件不能聲明命名卷,網(wǎng)絡(luò)或構(gòu)建參數(shù)。
使用版本1時(shí),Compose不利用網(wǎng)絡(luò):每個(gè)容器都放置在默認(rèn)bridge
網(wǎng)絡(luò)上,并且可以通過其IP地址上的每個(gè)其他容器進(jìn)行訪問。您將需要使用鏈接來啟用容器之間的發(fā)現(xiàn)。
例:
web: build: . ports: - "5000:5000" volumes: - .:/code links: - redis redis: image: redis
使用版本2語法撰寫文件必須在文檔的根目錄中指明版本號(hào)。所有服務(wù)必須在services
密鑰下聲明。
版本2文件由Compose 1.6.0+支持,并且需要版本為1.10.0+的Docker引擎。
命名卷可以在volumes
密鑰下聲明,網(wǎng)絡(luò)可以在networks
密鑰下聲明。
默認(rèn)情況下,每個(gè)容器都加入一個(gè)應(yīng)用程序范圍的默認(rèn)網(wǎng)絡(luò),并且可以在與服務(wù)名稱相同的主機(jī)名上發(fā)現(xiàn)。這意味著鏈接很不必要。有關(guān)更多詳細(xì)信息,請(qǐng)參閱撰寫中的聯(lián)網(wǎng)。
簡(jiǎn)單的例子:
version: '2'services: web: build: . ports: - "5000:5000" volumes: - .:/code redis: image: redis
一個(gè)更廣泛的例子,定義卷和網(wǎng)絡(luò):
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
添加了其他幾個(gè)選項(xiàng)來支持聯(lián)網(wǎng),例如:
aliases
該depends_on
選項(xiàng)可用于代替鏈接以指示服務(wù)和啟動(dòng)順序之間的依賴關(guān)系。版本:'2'服務(wù):web:build:。depends_on: - db - redis redis:image:redis db:image:postgres
ipv4_address
, ipv6_address
版本2中也添加了變量替換。
引入僅在Docker引擎版本1.12.0以上提供的新參數(shù)的版本2的升級(jí)。Compose 1.9.0+支持版本2.1文件。
引入以下附加參數(shù):
link_local_ips
isolation
labels
對(duì)于卷和網(wǎng)絡(luò)
name
為卷
userns_mode
healthcheck
sysctls
pids_limit
2.1版本的升級(jí)引入了僅在Docker Engine版本1.13.0+中可用的新參數(shù)。Compose 1.13.0+支持版本2.2文件。該版本還允許您指定服務(wù)配置中的默認(rèn)縮放編號(hào)。
引入以下附加參數(shù):
init
scale
2.2版的升級(jí)引入了僅在Docker Engine版本17.06.0以上版本中提供的新參數(shù)。Compose 1.16.0+支持版本2.3文件。
引入以下附加參數(shù):
target
用于構(gòu)建配置
start_period
對(duì)于 healthchecks
為了在Compose和Docker Engine的swarm模式之間交叉兼容,版本3刪除了幾個(gè)選項(xiàng)并添加了更多選項(xiàng)。
刪除:volume_driver
,volumes_from
,cpu_shares
,cpu_quota
,cpuset
,mem_limit
,memswap_limit
,extends
,group_add
。請(qǐng)參閱升級(jí)指南以了解如何遷移這些指南。(有關(guān)更多信息extends
,請(qǐng)參閱擴(kuò)展服務(wù)。)
補(bǔ)充:部署
引入僅適用于Docker Engine 17.06.0及更高版本的新參數(shù)的版本3的升級(jí)。
引入以下附加參數(shù):
建立 labels
credential_spec
configs
部署 endpoint_mode
在版本2.x和3.x之間,撰寫文件的結(jié)構(gòu)是相同的,但是幾個(gè)選項(xiàng)已被刪除:
volume_driver
:不是在服務(wù)上設(shè)置卷驅(qū)動(dòng),而是使用頂層volumes
選項(xiàng)定義卷并在那里指定驅(qū)動(dòng)。版本:“3”服務(wù):db:image:postgres卷: - data:/ var / lib / postgresql / data卷:data:驅(qū)動(dòng)程序:mydriver
volumes_from
:要在服務(wù)之間共享卷,請(qǐng)使用頂級(jí)volumes
選項(xiàng)對(duì)其進(jìn)行定義,并從使用服務(wù)級(jí)別volumes
選項(xiàng)共享服務(wù)的每個(gè)服務(wù)中引用它。
cpu_shares
,cpu_quota
,cpuset
,mem_limit
,memswap_limit
:這些已被替換下的資源鍵deploy
。請(qǐng)注意,deploy
配置僅在使用時(shí)生效docker stack deploy
,并被忽略docker-compose
。
extends
:對(duì)于version: "3.x"
撰寫文件,此選項(xiàng)已被刪除。(有關(guān)更多信息,請(qǐng)參閱擴(kuò)展服務(wù)。)
group_add
:對(duì)于version: "3.x"
撰寫文件,此選項(xiàng)已被刪除。
pids_limit
:此選項(xiàng)尚未在version: "3.x"
Compose文件中引入。
link_local_ips
in networks
:該選項(xiàng)尚未在version: "3.x"
Compose文件中引入。
在大多數(shù)情況下,從版本1移動(dòng)到2是一個(gè)非常簡(jiǎn)單的過程:
將整個(gè)文件縮進(jìn)一層,并services:
在頂部放置一個(gè)鍵。
version: '2'
在文件頂部添加一行。
如果您使用特定的配置功能,則會(huì)更加復(fù)雜:
dockerfile
:現(xiàn)在生活在build
關(guān)鍵之下:build:context:。dockerfile:Dockerfile-alternate
log_driver
,log_opt
:這些現(xiàn)在生活在logging
密鑰下:logging:driver:syslog options:syslog-address:“tcp://192.168.0.42:123”
links
使用環(huán)境變量:如環(huán)境變量引用中所述,由鏈接創(chuàng)建的環(huán)境變量已被棄用一段時(shí)間。在新的Docker網(wǎng)絡(luò)系統(tǒng)中,它們已被刪除。您應(yīng)該直接連接到適當(dāng)?shù)闹鳈C(jī)名或使用鏈接主機(jī)名設(shè)置相關(guān)的環(huán)境變量:web:links: - db environment: - DB_PORT = tcp:// db:5432
external_links
:Compose在運(yùn)行版本2項(xiàng)目時(shí)使用Docker網(wǎng)絡(luò),因此鏈接的行為稍有不同。特別是,兩個(gè)容器必須連接到至少一個(gè)共同的網(wǎng)絡(luò)才能通信,即使明確地鏈接在一起。將外部容器連接到應(yīng)用程序的默認(rèn)網(wǎng)絡(luò),或者將外部容器和服務(wù)的容器連接到外部網(wǎng)絡(luò)。
net
:這現(xiàn)在被network_mode:net:host - > network_mode:host net:bridge - > network_mode:bridge net:none - > network_mode:none 替代如果您正在使用net: "container:[service name]"
,您現(xiàn)在必須network_mode: "service:[service name]"
改用它。net:“container:web” - > network_mode:“service:web”如果你正在使用net: "container:[container name/id]"
,這個(gè)值不需要改變。net:“container:cont-name” - > network_mode:“container:cont-name”net:“container:abc12345” - > network_mode:“container:abc12345”
volumes
使用命名卷:現(xiàn)在必須在volumes
Compose文件的頂級(jí)部分顯式聲明這些命令。如果某個(gè)服務(wù)裝載了一個(gè)已命名的卷data
,則必須data
在頂級(jí)volumes
部分中聲明一個(gè)卷。整個(gè)文件可能如下所示:版本:'2'服務(wù):db:image:postgres卷: - data:/ var / lib / postgresql / data卷:data:默認(rèn)情況下,Compose創(chuàng)建一個(gè)卷,其名稱帶有前綴與您的項(xiàng)目名稱。如果您希望僅調(diào)用data
它,請(qǐng)將其聲明為external:volumes:data:external:true