包含
使用 `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 模型。