?
This document uses PHP Chinese website manual Release
Compose 支持兩種共享通用配置的方法:
擴(kuò)展整個(gè)撰寫文件使用多個(gè)組合文件
擴(kuò)展個(gè)人服務(wù)大extends
場(chǎng)域
使用多個(gè)組合文件可以使您為不同的環(huán)境或不同的工作流自定義組合應(yīng)用程序。
默認(rèn)情況下,撰寫讀取兩個(gè)文件,docker-compose.yml
還有一個(gè)可選的docker-compose.override.yml
檔案。根據(jù)慣例,docker-compose.yml
包含基本配置。正如其名稱所暗示的那樣,覆蓋文件可以包含對(duì)現(xiàn)有服務(wù)或全新服務(wù)的配置重寫。
如果在兩個(gè)文件中都定義了服務(wù),則使用添加和覆蓋配置.
若要使用多個(gè)覆蓋文件或具有不同名稱的重寫文件,可以使用-f
選項(xiàng)指定文件列表。按照命令行中指定的順序編寫合并文件。docker-compose
命令引用有關(guān)使用-f
使用多個(gè)配置文件時(shí),必須確保文件中的所有路徑相對(duì)于基本組合文件。這是必需的,因?yàn)橹貙懳募灰欢ㄊ怯行У慕M合文件。覆蓋文件可以包含小的配置片段。跟蹤服務(wù)的哪個(gè)片段相對(duì)于哪個(gè)路徑比較困難和混亂,因此,為了使路徑更容易理解,必須相對(duì)于基文件定義所有路徑。
在本節(jié)中,有兩個(gè)用于多個(gè)組合文件的常用用例:為不同的環(huán)境更改一個(gè)組合應(yīng)用程序,以及對(duì)一個(gè)復(fù)合應(yīng)用程序運(yùn)行管理任務(wù)。
多文件的常見用例是為類似生產(chǎn)環(huán)境(可能是生產(chǎn),分段或CI)更改開發(fā)撰寫應(yīng)用程序。為了支持這些差異,你可以將你的 Compose 配置分成幾個(gè)不同的文件:
從一個(gè)基本文件開始,它定義了服務(wù)的規(guī)范配置。
Docker-Compose.yml
web: image: example/my_web_app:latest links: - db - cache db: image: postgres:latest cache: image: redis:latest
在此示例中,開發(fā)配置向主機(jī)公開了一些端口,將我們的代碼作為卷裝入,并構(gòu)建 Web 圖像。
docker-compose.override.yml
web: build: . volumes: - '.:/code' ports: - 8883:80 environment: DEBUG: 'true'db: command: '-d' ports: - 5432:5432cache: ports: - 6379:6379
當(dāng)你運(yùn)行的時(shí)候docker-compose up
它自動(dòng)讀取重寫。
現(xiàn)在,在生產(chǎn)環(huán)境中使用 Compose 應(yīng)用程序?qū)?huì)很好。因此,創(chuàng)建另一個(gè)覆蓋文件(可能存儲(chǔ)在不同的 git 倉庫或由不同的團(tuán)隊(duì)管理)。
Docker-Compose.prod.yml
web: ports: - 80:80 environment: PRODUCTION: 'true'cache: environment: TTL: '500'
要使用此產(chǎn)品組合文件進(jìn)行部署,可以運(yùn)行
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
這將使用docker-compose.yml
和docker-compose.prod.yml
(但不包括開發(fā)配置docker-compose.override.yml
)中的配置部署所有三個(gè)服務(wù)。
有關(guān)產(chǎn)品中的 Compose 的更多信息,請(qǐng)參閱產(chǎn)品。
另一個(gè)常見的用例是針對(duì)組合應(yīng)用程序中的一個(gè)或多個(gè)服務(wù)運(yùn)行臨時(shí)或管理任務(wù)。此示例演示運(yùn)行數(shù)據(jù)庫備份。
從 Docker-Compose.yml 開始
web: image: example/my_web_app:latest links: - db db: image: postgres:latest
在 docker-compose.admin.yml 中添加一個(gè)新服務(wù)來運(yùn)行數(shù)據(jù)庫導(dǎo)出或備份。
dbadmin: build: database_admin/ links: - db
開始正常的環(huán)境運(yùn)行docker-compose up -d
。要運(yùn)行數(shù)據(jù)庫備份,也要包含docker-compose.admin.yml
。
docker-compose -f docker-compose.yml -f docker-compose.admin.yml \ run dbadmin db-backup
注意:
extends
關(guān)鍵字在早期的 Compose 文件格式中支持到 Compose 文件版本2.1(請(qǐng)參閱v1中的擴(kuò)展和第2版中的擴(kuò)展),但在 Compose 版本3.x中不受支持。請(qǐng)參閱第3版的添加和刪除鍵摘要以及有關(guān)如何升級(jí)的信息。請(qǐng)參閱 moby / moby#31101 以關(guān)注extends
在未來版本中以某種形式添加支持的可能性。
Docker Compose 的extends
關(guān)鍵字可以在不同文件之間共享通用配置,甚至可以完全共享不同的項(xiàng)目。如果您有多個(gè)服務(wù)可以重復(fù)使用一組通用配置選項(xiàng),則擴(kuò)展服務(wù)很有用。使用extends
您可以在一個(gè)地方定義一套通用的服務(wù)選項(xiàng),并從任何地方引用它。
記住links
,volumes_from
和depends_on
從不使用extends
服務(wù)之間共享。這些例外存在以避免隱式依賴性; 你總是本地定義links
和volumes_from
。這可以確保在讀取當(dāng)前文件時(shí),服務(wù)之間的依賴關(guān)系清晰可見。在本地定義這些也確保對(duì)引用文件的更改不會(huì)破壞任何內(nèi)容。
中定義任何服務(wù)時(shí)docker-compose.yml
,您可以聲明您正在擴(kuò)展如下的另一個(gè)服務(wù):
web: extends: file: common-services.yml service: webapp
此指令將編寫為重用webapp
中定義的服務(wù)。common-services.yml
檔案。假設(shè)common-services.yml
看起來是這樣的:
webapp: build: . ports: - "8000:8000" volumes: - "/data"
在這種情況下,您將得到完全相同的結(jié)果,就像您編寫docker-compose.yml
用同樣的build
,ports
和volumes
直接定義在web
.
您可以進(jìn)一步在本地定義(或重新定義)配置docker-compose.yml
:
web: extends: file: common-services.yml service: webapp environment: - DEBUG=1 cpu_shares: 5important_web: extends: web cpu_shares: 10
您還可以編寫其他服務(wù)并鏈接web
向他們提供服務(wù):
web: extends: file: common-services.yml service: webapp environment: - DEBUG=1 cpu_shares: 5 links: - db db: image: postgres
當(dāng)您有多個(gè)具有公共配置的服務(wù)時(shí),擴(kuò)展單個(gè)服務(wù)非常有用。下面的示例是一個(gè)包含兩個(gè)服務(wù)的撰寫應(yīng)用程序:一個(gè) Web 應(yīng)用程序和一個(gè)隊(duì)列工作程序。這兩個(gè)服務(wù)使用相同的代碼庫,并共享許多配置選項(xiàng)。
在 common.yml 中我們定義了通用配置:
app: build: . environment: CONFIG_FILE_PATH: /code/config API_KEY: xxxyyy cpu_shares: 5
在 docker-compose.yml 中,我們定義了使用通用配置的具體服務(wù):
webapp: extends: file: common.yml service: app command: /code/run_web_app ports: - 8080:8080 links: - queue - db queue_worker: extends: file: common.yml service: app command: /code/run_worker links: - queue
將副本配置從原始服務(wù)復(fù)制到本地服務(wù)。如果在原始服務(wù)和本地服務(wù)中都定義了配置選項(xiàng),則本地值取代或擴(kuò)展原始價(jià)值。
對(duì)于單值選項(xiàng)image
,command
或者mem_limit
,新值替換舊值。
# original service command: python app.py # local service command: python otherapp.py # result command: python otherapp.py
build
和image
在撰寫文件版本1 如屬build
和image
,使用時(shí)編寫文件格式的版本1,如果在原始服務(wù)中定義了另一個(gè)選項(xiàng),則使用本地服務(wù)中的一個(gè)選項(xiàng)將導(dǎo)致組合放棄另一個(gè)選項(xiàng)。 例如,如果原始服務(wù)定義image: webapp
本地服務(wù)定義build: .
則結(jié)果服務(wù)將具有build: .
而不是image
選擇。 這是因?yàn)?code>build和image
不能在版本1文件中一起使用。
對(duì)于多值的選項(xiàng) ports
,expose
,external_links
,dns
,dns_search
,和tmpfs
,撰寫會(huì)連接兩組的值:
# original service expose: - "3000"# local service expose: - "4000" - "5000"# result expose: - "3000" - "4000" - "5000"
在environment
,labels
,volumes
和devices
情況下,撰寫“合并”的條目連同本地定義的值取的優(yōu)先級(jí):
# original service environment: - FOO=original - BAR=original # local service environment: - BAR=local - BAZ=local # result environment: - FOO=original - BAR=local - BAZ=local
用戶指南
安裝組合
開始
從Django開始
從Rails開始
從WordPress開始
命令行引用
合成文件引用