11.1 簡介

Compose 專案是 Docker 官方的開源專案,負責實現對 Docker 容器的快速編排。從功能上看,跟 OpenStack 中的 Heat 十分類似。

其程式碼目前在 docker/compose 倉庫 上開源。

Compose 定位是 『定義和執行多個 Docker 容器的應用 (Defining and running multi-container Docker applications)』,其前身是開源專案 Fig。

透過第一部分中的介紹,我們知道使用一個 Dockerfile 樣板檔案,可以讓使用者很方便的定義一個單獨的應用容器。然而,在日常工作中,經常會碰到需要多個容器相互配合來完成某項任務的情況。例如要實現一個 Web 專案,除了 Web 服務容器本身,往往還需要再加上後端的資料庫服務容器,甚至還包括負載均衡容器等。

Compose 恰好滿足了這樣的需求。它允許使用者透過一個單獨的 compose.yaml (歷史預設名也常見為 docker-compose.yml) 樣板檔案 (YAML 格式) 來定義一組相關聯的應用容器為一個專案 (project)。

11.1.1 概述

Docker Compose 讓使用者能夠以宣告式方式定義和管理多容器應用。它的核心價值在於:用一個 YAML 檔案取代一連串手動的 docker run 指令,使得複雜應用的啟動、停止和重建變得一鍵可達。

對於開發團隊而言,Compose 解決了三個關鍵問題:環境一致性(『在我機器上能跑』的問題)、服務依賴管理(確保資料庫在應用之前啟動)、以及開發-測試-生產的設定差異管理(透過 compose.override.yaml 實現多環境適配)。

11.1.2 樣板檔案規範

Compose 樣板檔案採用 YAML 格式,副檔名為 .yml.yaml

注意:Compose Specification 的頂層 version 欄位僅用於向後相容,當前已標記為 obsolete。新檔案建議直接省略該欄位。

Docker Compose 預設使用 compose.yaml,也相容 compose.ymldocker-compose.yamldocker-compose.yml 等檔案名。

Compose 中有兩個重要的概念:

  • 服務 (service):一個應用的容器,實際上可以包括若干執行相同映象的容器實例。

  • 專案 (project):由一組關聯的應用容器組成的一個完整業務單元,在 Compose 檔案中定義。

Compose 的預設管理物件是專案,透過子指令對專案中的一組容器進行便捷地生命週期管理。

Compose 專案早期由 Python 編寫,稱為 Docker Compose V1。

現在的 Docker Compose V2 是一個 Go 語言編寫的 Docker CLI 外掛(當前版本號已演進至 v5.x 系列,以避免與舊 Compose 檔案格式版本混淆)。Docker Desktop 預設包含它;在 Linux 上,也可以將它作為獨立的 CLI 外掛安裝後直接透過 docker compose 指令使用。它提供了更快的效能和更好的整合體驗。

只要所操作的平台支援 Docker API,就可以在其上利用 Compose 來進行編排管理。

第 89 页,共 196 页
使用 mdPress 构建