docker compose

描述Docker Compose
用法docker compose

描述

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

選項

選項預設值描述
--all-resources包含所有資源,即使是服務未使用的資源
--ansiauto控制何時列印 ANSI 控制字元("從不"|"總是"|"自動")
--compatibility以向後相容模式執行 compose
--dry-run以空執行模式執行命令
--env-file指定備用環境檔案
-f, --fileCompose 配置檔案
--parallel-1控制最大並行度,-1 表示無限制
--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 讀取配置。當使用 stdin 時,配置中的所有路徑都相對於當前工作目錄。

-f 標誌是可選的。如果您在命令列中未提供此標誌,Compose 會遍歷工作目錄及其父目錄,查詢 compose.yamldocker-compose.yaml 檔案。

指定單個 Compose 檔案的路徑

您可以使用 -f 標誌指定不在當前目錄中的 Compose 檔案的路徑,既可以透過命令列,也可以透過在 shell 或環境檔案中設定 COMPOSE_FILE 環境變數。

例如,要使用命令列中的 -f 選項,假設您正在執行 Compose Rails 示例,並且在名為 sandbox/rails 的目錄中有一個 compose.yaml 檔案。您可以使用類似 docker compose pull 的命令,透過使用 -f 標誌從任何位置獲取 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

使用配置檔案啟用可選服務

使用 --profile 指定一個或多個活動配置檔案。呼叫 docker compose --profile frontend up 會啟動具有 frontend 配置檔案和未指定任何配置檔案的服務。您還可以啟用多個配置檔案,例如,使用 docker compose --profile frontend --profile debug up 將啟用 frontenddebug 配置檔案。

配置檔案也可以透過 COMPOSE_PROFILES 環境變數設定。

配置並行度

使用 --parallel 指定併發引擎呼叫的最大並行級別。呼叫 docker compose --parallel 1 pull 將一次拉取 Compose 檔案中定義的可拉取映象。這也可以用於控制構建併發。

並行度也可以透過 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 檢測專案的孤立容器。

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

使用空執行模式測試您的命令

使用 --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監視服務的構建上下文,並在檔案更新時重建/重新整理容器