?
本文檔使用 php中文網(wǎng)手冊 發(fā)布
Compose 支持兩種共享通用配置的方法:
擴(kuò)展整個撰寫文件使用多個組合文件
擴(kuò)展個人服務(wù)大extends
場域
使用多個組合文件可以使您為不同的環(huán)境或不同的工作流自定義組合應(yīng)用程序。
默認(rèn)情況下,撰寫讀取兩個文件,docker-compose.yml
還有一個可選的docker-compose.override.yml
檔案。根據(jù)慣例,docker-compose.yml
包含基本配置。正如其名稱所暗示的那樣,覆蓋文件可以包含對現(xiàn)有服務(wù)或全新服務(wù)的配置重寫。
如果在兩個文件中都定義了服務(wù),則使用添加和覆蓋配置.
若要使用多個覆蓋文件或具有不同名稱的重寫文件,可以使用-f
選項指定文件列表。按照命令行中指定的順序編寫合并文件。docker-compose
命令引用有關(guān)使用-f
使用多個配置文件時,必須確保文件中的所有路徑相對于基本組合文件。這是必需的,因為重寫文件不一定是有效的組合文件。覆蓋文件可以包含小的配置片段。跟蹤服務(wù)的哪個片段相對于哪個路徑比較困難和混亂,因此,為了使路徑更容易理解,必須相對于基文件定義所有路徑。
在本節(jié)中,有兩個用于多個組合文件的常用用例:為不同的環(huán)境更改一個組合應(yīng)用程序,以及對一個復(fù)合應(yīng)用程序運行管理任務(wù)。
多文件的常見用例是為類似生產(chǎn)環(huán)境(可能是生產(chǎn),分段或CI)更改開發(fā)撰寫應(yīng)用程序。為了支持這些差異,你可以將你的 Compose 配置分成幾個不同的文件:
從一個基本文件開始,它定義了服務(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)你運行的時候docker-compose up
它自動讀取重寫。
現(xiàn)在,在生產(chǎn)環(huán)境中使用 Compose 應(yīng)用程序?qū)芎谩R虼?,?chuàng)建另一個覆蓋文件(可能存儲在不同的 git 倉庫或由不同的團(tuán)隊管理)。
Docker-Compose.prod.yml
web: ports: - 80:80 environment: PRODUCTION: 'true'cache: environment: TTL: '500'
要使用此產(chǎn)品組合文件進(jì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
)中的配置部署所有三個服務(wù)。
有關(guān)產(chǎn)品中的 Compose 的更多信息,請參閱產(chǎn)品。
另一個常見的用例是針對組合應(yīng)用程序中的一個或多個服務(wù)運行臨時或管理任務(wù)。此示例演示運行數(shù)據(jù)庫備份。
從 Docker-Compose.yml 開始
web: image: example/my_web_app:latest links: - db db: image: postgres:latest
在 docker-compose.admin.yml 中添加一個新服務(wù)來運行數(shù)據(jù)庫導(dǎo)出或備份。
dbadmin: build: database_admin/ links: - db
開始正常的環(huán)境運行docker-compose up -d
。要運行數(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(請參閱v1中的擴(kuò)展和第2版中的擴(kuò)展),但在 Compose 版本3.x中不受支持。請參閱第3版的添加和刪除鍵摘要以及有關(guān)如何升級的信息。請參閱 moby / moby#31101 以關(guān)注extends
在未來版本中以某種形式添加支持的可能性。
Docker Compose 的extends
關(guān)鍵字可以在不同文件之間共享通用配置,甚至可以完全共享不同的項目。如果您有多個服務(wù)可以重復(fù)使用一組通用配置選項,則擴(kuò)展服務(wù)很有用。使用extends
您可以在一個地方定義一套通用的服務(wù)選項,并從任何地方引用它。
記住links
,volumes_from
和depends_on
從不使用extends
服務(wù)之間共享。這些例外存在以避免隱式依賴性; 你總是本地定義links
和volumes_from
。這可以確保在讀取當(dāng)前文件時,服務(wù)之間的依賴關(guān)系清晰可見。在本地定義這些也確保對引用文件的更改不會破壞任何內(nèi)容。
中定義任何服務(wù)時docker-compose.yml
,您可以聲明您正在擴(kuò)展如下的另一個服務(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)您有多個具有公共配置的服務(wù)時,擴(kuò)展單個服務(wù)非常有用。下面的示例是一個包含兩個服務(wù)的撰寫應(yīng)用程序:一個 Web 應(yīng)用程序和一個隊列工作程序。這兩個服務(wù)使用相同的代碼庫,并共享許多配置選項。
在 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ù)中都定義了配置選項,則本地值取代或擴(kuò)展原始價值。
對于單值選項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
,使用時編寫文件格式的版本1,如果在原始服務(wù)中定義了另一個選項,則使用本地服務(wù)中的一個選項將導(dǎo)致組合放棄另一個選項。 例如,如果原始服務(wù)定義image: webapp
本地服務(wù)定義build: .
則結(jié)果服務(wù)將具有build: .
而不是image
選擇。 這是因為build
和image
不能在版本1文件中一起使用。
對于多值的選項 ports
,expose
,external_links
,dns
,dns_search
,和tmpfs
,撰寫會連接兩組的值:
# original service expose: - "3000"# local service expose: - "4000" - "5000"# result expose: - "3000" - "4000" - "5000"
在environment
,labels
,volumes
和devices
情況下,撰寫“合并”的條目連同本地定義的值取的優(yōu)先級:
# 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開始
命令行引用
合成文件引用