使用 include 將 Compose 檔案模組化
透過包含其他 Compose 檔案,可以重用 Docker Compose 配置並將其模組化。這在以下情況下很有用:
- 您想重用其他 Compose 檔案。
- 您需要將應用程式模型的某些部分分解到單獨的 Compose 檔案中,以便它們可以單獨管理或與他人共享。
- 團隊需要維護一個 Compose 檔案,其中只包含其在大型部署中宣告自己子域所需資源的必要複雜性。
頂層部分 include
用於定義對另一個 Compose 應用程式或子域的依賴關係。include
部分中列出的每個路徑都作為單獨的 Compose 應用程式模型載入,並擁有自己的專案目錄,以便解析相對路徑。
一旦載入了包含的 Compose 應用程式,所有資源定義都將複製到當前的 Compose 應用程式模型中。如果資源名稱衝突,Compose 會顯示警告,並且不會嘗試合併它們。為了強制執行此操作,include
在解析併合並選擇用於定義 Compose 應用程式模型的 Compose 檔案後進行評估,以便檢測 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 檔案的位置。
path
可以設定為:
- 一個字串:當使用單個 Compose 檔案時。
- 一個字串列表:當多個 Compose 檔案需要合併在一起以定義本地應用程式的 Compose 模型時。
include:
- path:
- ../commons/compose.yaml
- ./commons-override.yaml
專案目錄
project_directory
定義了一個基本路徑,用於解析 Compose 檔案中設定的相對路徑。它預設為包含的 Compose 檔案的目錄。
env_file
env_file
定義了一個或多個環境變數檔案,用於在解析 Compose 檔案中的變數時定義預設值。它預設為解析的 Compose 檔案在 project_directory
中的 .env
檔案。
當需要合併多個環境檔案來定義專案環境時,env_file
可以設定為字串或字串列表。
include:
- path: ../another/compose.yaml
env_file:
- ../another/.env
- ../another/dev.env
本地專案的環境優先於 Compose 檔案設定的值,以便本地專案可以覆蓋值進行自定義。
其他資源
有關使用 include
的更多資訊,請參閱使用多個 Compose 檔案