docker compose

描述Docker Compose
使用方式docker compose

描述

使用 Docker 定義並執行多容器應用程式

選項

選項預設值描述
--all-resources包含所有資源,即使是服務未使用的資源
--ansiauto控制何時列印 ANSI 控制字元("never"|"always"|"auto")
--compatibility以向後相容模式執行 Compose
--dry-run以試運行(dry run)模式執行指令
--env-file指定替代的環境檔案
-f, --fileCompose 設定檔
--parallel-1控制最大平行處理數量,-1 為不限制
--profile指定要啟用的設定檔(profile)
--progress設定進度輸出類型 (auto, tty, plain, json, quiet)
--project-directory指定替代的工作目錄
(預設:第一個指定的 Compose 檔案的路徑)
-p, --project-name專案名稱

範例

使用 -f 指定一個或多個 Compose 檔案的名稱與路徑

使用 -f 旗標來指定 Compose 設定檔的位置。

指定多個 Compose 檔案

您可以提供多個 -f 設定檔。當您提供多個檔案時,Compose 會將它們合併為單一設定。Compose 會按照您提供檔案的順序來建立設定。後續的檔案會覆寫並新增至其先前的檔案內容中。

例如,考慮此指令列

$ docker compose -f compose.yaml -f compose.admin.yaml run backup_db

compose.yaml 檔案可能會指定一個 webapp 服務。

services:
  webapp:
    image: examples/web
    ports:
      - "8000:8000"
    volumes:
      - "/data"

如果 compose.admin.yaml 也指定了同一個服務,任何匹配的欄位都會覆寫前一個檔案。新的值會新增至 webapp 服務設定中。

services:
  webapp:
    build: .
    environment:
      - DEBUG=1

當您使用多個 Compose 檔案時,檔案中的所有路徑皆相對於第一個使用 -f 指定的設定檔。您可以使用 --project-directory 選項來覆寫此基準路徑。

使用 -f 並將 - (破折號) 作為檔案名稱,可從標準輸入 (stdin) 讀取設定。當使用標準輸入時,設定中的所有路徑皆相對於目前的工作目錄。

-f 旗標是選用的。如果您未在指令列中提供此旗標,Compose 會遍歷工作目錄及其父目錄,尋找 compose.yamldocker-compose.yaml 檔案。

指定單一 Compose 檔案的路徑

您可以使用 -f 旗標來指定不在目前目錄中的 Compose 檔案路徑,無論是透過指令列指定,還是在 Shell 或環境檔案中設定 COMPOSE_FILE 環境變數。

關於在指令列使用 -f 選項的範例,假設您正在執行 Compose Rails 範例,並且在名為 sandbox/rails 的目錄中有一個 compose.yaml 檔案。您可以透過使用 -f 旗標,從任何位置執行類似 docker compose pull 的指令來獲取 db 服務的 postgres 映像檔,如下所示

$ docker compose -f ~/sandbox/rails/compose.yaml pull db

使用 -p 指定專案名稱

每個設定都有一個專案名稱。Compose 會依照下列順序(優先級由高至低)設定專案名稱:

  • -p 指令列旗標
  • COMPOSE_PROJECT_NAME 環境變數
  • 設定檔中的頂層 name: 變數(或是使用 -f 指定的一系列設定檔中的最後一個 name:
  • 包含設定檔的專案目錄的 basename(或包含第一個使用 -f 指定的設定檔的目錄)
  • 如果未指定設定檔,則為目前目錄的 basename。專案名稱只能包含小寫字母、十進位數字、破折號和底線,且必須以小寫字母或十進位數字開頭。如果專案目錄或目前目錄的 basename 違反此限制,您必須使用其他機制。
$ docker compose -p my_project ps -a
NAME                 SERVICE    STATUS     PORTS
my_project_demo_1    demo       running

$ docker compose -p my_project logs
demo_1  | PING localhost (127.0.0.1): 56 data bytes
demo_1  | 64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.095 ms

使用設定檔 (profiles) 來啟用選用服務

使用 --profile 指定一個或多個作用中的設定檔。執行 docker compose --profile frontend up 會啟動具有 frontend 設定檔的服務以及沒有指定任何設定檔的服務。您也可以啟用多個設定檔,例如使用 docker compose --profile frontend --profile debug up,此時 frontenddebug 設定檔皆會被啟用。

設定檔也可以透過 COMPOSE_PROFILES 環境變數來設定。

設定平行處理

使用 --parallel 指定引擎併發呼叫的最大平行處理層級。執行 docker compose --parallel 1 pull 會一次一個地拉取 Compose 檔案中定義的可拉取映像檔。這也可以用來控制組建(build)的併發性。

平行處理也可以透過 COMPOSE_PARALLEL_LIMIT 環境變數來設定。

設定環境變數

您可以為各種 docker compose 選項設定環境變數,包含 -f-p--profiles 旗標。

設定 COMPOSE_FILE 環境變數等同於傳遞 -f 旗標;COMPOSE_PROJECT_NAME 環境變數與 -p 旗標作用相同;COMPOSE_PROFILES 環境變數等同於 --profiles 旗標;而 COMPOSE_PARALLEL_LIMIT--parallel 旗標作用相同。

如果已在指令列明確設定旗標,則相關的環境變數將被忽略。

COMPOSE_IGNORE_ORPHANS 環境變數設定為 true,會停止 docker compose 偵測該專案的孤立(orphaned)容器。

COMPOSE_MENU 環境變數設定為 false,會在以附加(attached)模式執行 docker compose up 時停用輔助選單。或者,您也可以執行 docker compose up --menu=false 來停用輔助選單。

使用試運行(Dry Run)模式來測試您的指令

使用 --dry-run 旗標可以在不改變應用程式堆疊狀態的情況下測試指令。試運行模式會向您顯示 Compose 在執行指令時所應用的所有步驟,例如:

$ docker compose --dry-run up --build -d
[+] Pulling 1/1
 ✔ DRY-RUN MODE -  db Pulled                                                                                                                                                                                                               0.9s
[+] Running 10/8
 ✔ DRY-RUN MODE -    build service backend                                                                                                                                                                                                 0.0s
 ✔ DRY-RUN MODE -  ==> ==> writing image dryRun-754a08ddf8bcb1cf22f310f09206dd783d42f7dd                                                                                                                                                   0.0s
 ✔ DRY-RUN MODE -  ==> ==> naming to nginx-golang-mysql-backend                                                                                                                                                                            0.0s
 ✔ DRY-RUN MODE -  Network nginx-golang-mysql_default                                    Created                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-db-1                                     Created                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-backend-1                                Created                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-proxy-1                                  Created                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-db-1                                     Healthy                                                                                                                                           0.5s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-backend-1                                Started                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-proxy-1                                  Started                                     Started

從上面的範例中,您可以看到第一步是拉取由 db 服務定義的映像檔,然後組建 backend 服務。接下來,會建立容器。db 服務會先啟動,而 backendproxy 會等待 db 服務狀態健康後再開始啟動。

試運行模式適用於幾乎所有的指令。您不能將試運行模式用於不會改變 Compose 堆疊狀態的指令,例如 pslslogs 等。

子命令

指令描述
docker compose alpha實驗性指令
docker compose attach將本機標準輸入、輸出及錯誤串流附加至服務正在執行的容器
docker compose bridge將 compose 檔案轉換為其他模型
docker compose build組建或重新組建服務
docker compose config以規範格式解析、解析並渲染 compose 檔案
docker compose cp在服務容器與本機檔案系統之間複製檔案/資料夾
docker compose create為服務建立容器
docker compose down停止並移除容器與網路
docker compose events從容器接收即時事件
docker compose exec在執行中的容器內執行指令
docker compose images列出已建立容器所使用的映像檔
docker compose kill強制停止服務容器
docker compose logs檢視容器輸出
docker compose ls列出正在執行的 compose 專案
docker compose pause暫停服務
docker compose port列印連接埠繫結的公開連接埠
docker compose ps列出容器
docker compose publish發佈 compose 應用程式
docker compose pull拉取服務映像檔
docker compose push推送服務映像檔
docker compose restart重新啟動服務容器
docker compose rm移除已停止的服務容器
docker compose run在服務上執行一次性指令
docker compose start啟動服務
docker compose stop停止服務
docker compose top顯示執行中的處理程序
docker compose unpause取消暫停服務
docker compose up建立並啟動容器
docker compose version顯示 Docker Compose 版本資訊
docker compose volumes列出儲存卷
docker compose wait封鎖直到所有(或指定)服務的容器停止為止。
docker compose watch監控服務的組建上下文,並在檔案更新時重新組建/重新整理容器
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.