常用 Docker 指令:docker compose
docker compose 指令是 Docker 中用於定義和執行多容器應用程式的工具,透過 compose.yaml(或 docker-compose.yml)設定檔來描述應用的服務、網路與 Volume 配置。相較於手動逐一管理容器,Compose 能以單一指令同時啟動、停止、監控整個應用的所有服務,大幅簡化開發與部署流程。
常用全域 Options
以下 Options 可接在 docker compose 後、子命令之前,對所有子命令生效:
-
-f, --file:指定使用的 Compose 設定檔路徑,預設為compose.yaml或docker-compose.yml。可指定多個以合併設定:docker compose -f docker-compose.yml -f docker-compose.override.yml up -
-p, --project-name:指定專案名稱,預設為目前目錄名稱。用於區分多個使用相同設定檔的專案:docker compose -p my-project up -d -
--env-file:指定要載入的環境變數檔案,預設為.env。 -
--profile:啟用特定的 Profile(選擇性服務),可一次啟用多個。 -
--dry-run:模擬執行模式,不實際執行任何操作,用於驗證指令效果。
build: 建構服務映像
| 說明 | 根據 Compose 檔案中的 build 設定建構各服務的映像 |
|---|---|
| 使用方式 | docker compose build [OPTIONS] [SERVICE...] |
docker compose build
指定重建特定服務:
docker compose build web
--no-cache:建構時不使用快取,強制重新執行所有步驟。--pull:強制拉取最新的基礎映像。--build-arg:傳遞建構參數,例如--build-arg NODE_ENV=production。-q, --quiet:不顯示建構輸出。
詳細 Options 說明可參閱 @docker compose build
config: 驗證並查看合併後的 Compose 設定
| 說明 | 解析並輸出合併後的 Compose 設定內容,可用於驗證設定是否正確 |
|---|---|
| 使用方式 | docker compose config [OPTIONS] [SERVICE...] |
docker compose config
config 會合併所有 -f 指定的設定檔、解析環境變數,並將簡寫格式展開為完整格式後輸出,是確認最終設定的好工具。
--services:只列出所有服務名稱。--volumes:只列出所有 Volume 名稱。--images:只列出所有使用到的映像名稱。-q, --quiet:只進行驗證,不輸出任何內容(有錯誤則會顯示)。
詳細 Options 說明可參閱 @docker compose config
down: 停止並移除所有資源
| 說明 | 停止容器,並移除容器、網路等由 up 建立的資源 |
|---|---|
| 使用方式 | docker compose down [OPTIONS] [SERVICE...] |
docker compose down
預設情況下,down 只會移除:
- Compose 檔案中定義的服務容器
- Compose 檔案中定義的網路(以及預設網路)
下列資源不會被預設刪除:
- 外部(external)定義的網路與 Volume
- 映像
常用 Options:
-v, --volumes:同時刪除 Compose 檔案中定義的具名 Volume(資料會遺失,請謹慎使用)。--rmi all:同時刪除服務使用的所有映像;--rmi local只刪除沒有自訂標籤的映像。--remove-orphans:移除不在目前 Compose 設定檔中的容器(孤立容器)。-t, --timeout:指定停止容器前的等待時間(秒)。
詳細 Options 說明可參閱 @docker compose down
exec: 在執行中的服務容器內執行命令
| 說明 | 在指定服務的運行中容器內執行命令,等同於 docker exec |
|---|---|
| 使用方式 | docker compose exec [OPTIONS] SERVICE COMMAND [ARGS...] |
docker compose exec web sh
與 docker exec 不同的是,docker compose exec 預設就會分配 TTY 並進入互動模式,不需要額外加 -it 旗標:
# 進入 web 服務的 shell
docker compose exec web bash
# 在 db 服務中執行一次性指令
docker compose exec db psql -U postgres -c "\l"
-e, --env:設置執行命令時的環境變數。-u, --user:指定執行命令的使用者。-w, --workdir:指定執行命令時的工作目錄。-d, --detach:在背景執行命令,不附加到終端。--index:當服務有多個執行實例時,指定要進入的容器索引(從 1 開始)。
詳細 Options 說明可參閱 @docker compose exec
logs: 查看服務日誌
| 說明 | 顯示一個或多個服務的日誌輸出 |
|---|---|
| 使用方式 | docker compose logs [OPTIONS] [SERVICE...] |
# 查看所有服務的日誌
docker compose logs
# 只查看特定服務的日誌
docker compose logs web
-f, --follow:即時追蹤新產生的日誌輸出。-n, --tail:只顯示最後 N 行日誌,例如--tail 100。-t, --timestamps:在每行日誌前顯示時間戳。--since:只顯示指定時間之後的日誌,例如--since "2024-01-01T00:00:00"。--until:只顯示指定時間之前的日誌。--no-log-prefix:不顯示服務名稱前綴,適合只追蹤單一服務時使用。
詳細 Options 說明可參閱 @docker compose logs
ps: 列出服務的容器狀態
| 說明 | 列出目前 Compose 專案中所有容器的狀態與埠對應 |
|---|---|
| 使用方式 | docker compose ps [OPTIONS] [SERVICE...] |
docker compose ps
-a, --all:列出所有容器,包含已停止的容器(預設只顯示執行中的)。-q, --quiet:只顯示容器 ID。--services:只列出服務名稱。--status:依狀態過濾,例如--status running、--status exited。
詳細 Options 說明可參閱 @docker compose ps
pull: 拉取服務映像
| 說明 | 拉取 Compose 檔案中各服務所指定的映像,但不啟動容器 |
|---|---|
| 使用方式 | docker compose pull [OPTIONS] [SERVICE...] |
# 拉取所 有服務的映像
docker compose pull
# 只拉取特定服務的映像
docker compose pull db
-q, --quiet:抑制拉取過程的詳細輸出。--ignore-pull-failures:忽略拉取失敗的錯誤,繼續處理其他服務。--ignore-buildable:略過有build設定的服務(只拉取有image設定的服務)。--include-deps:同時拉取相依服務的映像。
詳細 Options 說明可參閱 @docker compose pull
restart: 重啟服務
| 說明 | 重新啟動所有已停止或執行中的服務,或指定服務 |
|---|---|
| 使用方式 | docker compose restart [OPTIONS] [SERVICE...] |
# 重啟所有服務
docker compose restart
# 只重啟特定服務
docker compose restart web
-t, --timeout:指定停止容器前的等待時間(秒)。
docker compose restart 不會套用 compose.yaml 中的設定變更(例如環境變數更新)。若要讓設定變化生效,應使用 docker compose up 重新建立容器,而非僅重啟。
詳細 Options 說明可參閱 @docker compose restart