使用 include 將 Compose 檔案模組化

要求: Docker Compose 2.20.0 及更高版本

透過包含其他 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 檔案