docker compose
說明 | Docker Compose |
---|---|
用法 | docker compose |
說明
使用 Docker 定義和執行多容器應用程式
選項
選項 | 預設值 | 說明 |
---|---|---|
--all-resources | 包含所有資源,即使是服務未使用到的資源 | |
--ansi | 自動 | 控制何時列印 ANSI 控制字元("never"|"always"|"auto") |
--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 docker-compose.yml -f docker-compose.admin.yml run backup_db
docker-compose.yml
檔案可能會指定 webapp
服務。
services:
webapp:
image: examples/web
ports:
- "8000:8000"
volumes:
- "/data"
如果 docker-compose.admin.yml
也指定了相同的服務,則任何相符的欄位都會覆蓋先前的檔案。新的值會新增到 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:
) - 包含設定檔(或使用
-f
指定的第一個設定檔)的專案目錄的basename
(基本名稱)。 - 如果未指定設定檔,則為目前目錄的
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 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 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 wait | 封鎖直到所有(或指定的)服務的容器停止。 |
docker compose watch | 監控服務的建置上下文,並在檔案更新時重建/重新整理容器 |