引用
Compose 應用程式可以宣告對另一個 Compose 應用程式的依賴關係。這在以下情況下很有用:
- 您想要重複使用其他 Compose 檔案。
- 您需要將應用程式模型的某些部分分解成單獨的 Compose 檔案,以便可以單獨管理或與他人共用。
- 團隊需要在其必須在較大部署中為其子網域宣告的有限資源數量下,保持 Compose 檔案的合理複雜性。
頂層 `include` 區段用於定義對另一個 Compose 應用程式或子網域的依賴關係。 `include` 區段中列出的每個路徑都會載入為個別的 Compose 應用程式模型,並具有自己的專案目錄,以便解析相對路徑。
載入包含的 Compose 應用程式後,所有資源定義都會複製到目前的 Compose 應用程式模型中。如果資源名稱衝突,Compose 會顯示警告,並且不會嘗試合併它們。為了強制執行此操作,在剖析和合併選定用於定義 Compose 應用程式模型的 Compose 檔案之後,才會評估 `include`,以便偵測 Compose 檔案之間的衝突。
`include` 會遞迴套用,因此宣告自身 `include` 區段的包含 Compose 檔案也會觸發包含其他檔案。
目前的 Compose 應用程式可以使用從包含的 Compose 檔案中提取的任何磁碟區、網路或其他資源來進行跨服務參考。例如:
include:
- my-compose-include.yaml #with serviceB declared
services:
serviceA:
build: .
depends_on:
- serviceB #use serviceB directly as if it was declared in this Compose file
Compose 也支援在 `include` 中使用插值變數。建議您指定必要的變數。例如:
include:
-${INCLUDE_PATH:?FOO}/compose.yaml
簡短語法
簡短語法僅定義其他 Compose 檔案的路徑。該檔案會以父資料夾作為專案目錄載入,並載入一個可選的 `.env` 檔案,透過插值定義任何變數的預設值。本地專案的環境可以覆蓋這些值。
include:
- ../commons/compose.yaml
- ../another_domain/compose.yaml
services:
webapp:
depends_on:
- included-service # defined by another_domain
在上面的範例中,`../commons/compose.yaml` 和 `../another_domain/compose.yaml` 都會載入為個別的 Compose 專案。 `include` 所參考的 Compose 檔案中的相對路徑是相對於它們自己的 Compose 檔案路徑解析的,而不是基於本地專案的目錄。變數會使用在同一個資料夾中的可選 `.env` 檔案中設定的值進行插值,並由本地專案的環境覆蓋。
完整語法
完整語法提供對子專案剖析更多的控制
include:
- path: ../commons/compose.yaml
project_directory: ..
env_file: ../another/.env
路徑
path
為必要參數,定義要解析並包含到本地 Compose 模型中的 Compose 檔案位置。當只有一個 Compose 檔案時,path
可以設定為字串;當需要將多個 Compose 檔案合併以定義要包含在本地應用程式中的 Compose 模型時,則可以設定為字串列表。
include:
- path:
- ../commons/compose.yaml
- ./commons-override.yaml
專案目錄
project_directory
定義一個基底路徑,用於解析 Compose 檔案中設定的相對路徑。它預設為所包含 Compose 檔案的目錄。
環境變數檔案
env_file
定義一個或多個環境檔案,用於在解析 Compose 檔案時定義變數插值的預設值。它預設為正在解析的 Compose 檔案所在 project_directory
中的 .env
檔案。
當需要合併多個環境檔案以定義專案環境時,env_file
可以設定為字串或字串列表。
include:
- path: ../another/compose.yaml
env_file:
- ../another/.env
- ../another/dev.env
本地專案的環境優先於 Compose 檔案設定的值,以便本地專案可以覆寫值進行客製化。
其他資源
有關使用 include
的更多資訊,請參閱使用多個 Compose 檔案