docker compose
| 描述 | Docker Compose |
|---|---|
| 使用方式 | docker compose |
描述
使用 Docker 定義並執行多容器應用程式
選項
| 選項 | 預設值 | 描述 |
|---|---|---|
--all-resources | 包含所有資源,即使是服務未使用的資源 | |
--ansi | auto | 控制何時列印 ANSI 控制字元("never"|"always"|"auto") |
--compatibility | 以向後相容模式執行 Compose | |
--dry-run | 以試運行(dry run)模式執行指令 | |
--env-file | 指定替代的環境檔案 | |
-f, --file | Compose 設定檔 | |
--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.yaml 或 docker-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,此時 frontend 和 debug 設定檔皆會被啟用。
設定檔也可以透過 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 服務會先啟動,而 backend 和 proxy 會等待 db 服務狀態健康後再開始啟動。
試運行模式適用於幾乎所有的指令。您不能將試運行模式用於不會改變 Compose 堆疊狀態的指令,例如 ps、ls、logs 等。