包含

Docker Compose 版本 2.20.3 引進

使用 `include`,您可以直接在目前的 `compose.yaml` 檔案中納入個別的 `compose.yaml` 檔案。這可以輕鬆地將複雜的應用程式模組化成子 Compose 檔案,進而讓應用程式設定更簡單、更明確。

`include` 頂層元素 有助於直接在設定檔的組織中反映負責程式碼的工程團隊。它也解決了 `extends``merge` 存在的相對路徑問題。

`include` 區段中列出的每個路徑都會載入為個別的 Compose 應用程式模型,並具有自己的專案目錄,以便解析相對路徑。

載入包含的 Compose 應用程式後,所有資源都會複製到目前的 Compose 應用程式模型中。

注意

`include` 會遞迴套用,因此包含的 Compose 檔案如果宣告了自己的 `include` 區段,也會導致包含其他檔案。

範例

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

`my-compose-include.yaml` 管理 `serviceB`,其中詳細說明了一些副本、用於檢查資料的 Web UI、隔離網路、用於資料持續性的磁碟區等等。依賴 `serviceB` 的應用程式不需要知道基礎架構的詳細資訊,並且可以將 Compose 檔案作為其可以依賴的建構區塊來使用。

這表示管理 `serviceB` 的團隊可以重構其自己的資料庫元件,以引入額外的服務,而不會影響任何依賴團隊。這也表示依賴團隊不需要在其執行的每個 Compose 命令上包含額外的旗標。

Include 和覆寫

如果 `include` 中的任何資源與包含的 Compose 檔案中的資源衝突,Compose 會回報錯誤。此規則可防止與包含的 compose 檔案作者定義的資源發生意外衝突。但是,在某些情況下,您可能想要調整包含的模型。這可以透過將覆寫檔案新增至 include 指令來達成

include:
  - path : 
      - third-party/compose.yaml
      - override.yaml  # local override for third-party model

這種方法的主要限制是您需要針對每個 include 維護一個專用的覆寫檔案。對於具有多個 include 的複雜專案,這將導致許多 Compose 檔案。

另一種選擇是使用 `compose.override.yaml` 檔案。雖然當宣告相同資源時,使用 `include` 的檔案會拒絕衝突,但全域 Compose 覆寫檔案可以覆寫產生的合併模型,如下例所示

主要的 `compose.yaml` 檔案

include:
  - team-1/compose.yaml # declare service-1
  - team-2/compose.yaml # declare service-2

覆寫 `compose.override.yaml` 檔案

services:
  service-1:
    # override included service-1 to enable debugger port
    ports:
      - 2345:2345

  service-2:
    # override included service-2 to use local data folder containing test data
    volumes:
      - ./data:/data

結合在一起,您可以受益於第三方可重複使用的元件,並根據您的需求調整 Compose 模型。

參考資訊

`include` 頂層元素