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