docker compose
描述 | Docker Compose |
---|---|
用法 | docker compose |
描述
使用 Docker 定義和執行多容器應用程式
選項
選項 | 預設值 | 描述 |
---|---|---|
--all-resources | 包含所有資源,即使是服務未使用的資源 | |
--ansi | auto | 控制何時列印 ANSI 控制字元("從不"|"總是"|"自動") |
--compatibility | 以向後相容模式執行 compose | |
--dry-run | 以空執行模式執行命令 | |
--env-file | 指定備用環境檔案 | |
-f, --file | Compose 配置檔案 | |
--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.yaml
或 docker-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
將啟用 frontend
和 debug
配置檔案。
配置檔案也可以透過 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
服務啟動,而 backend
和 proxy
則等到 db
服務健康後才啟動。
空執行模式適用於幾乎所有命令。您不能將空執行模式與不更改 Compose 堆疊狀態的命令一起使用,例如 ps
、ls
、logs
等。
子命令
命令 | 描述 |
---|---|
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 | 監視服務的構建上下文,並在檔案更新時重建/重新整理容器 |