5.3 Compose 常用指令#
日常操作就這幾個#
寫好 docker-compose.yml 之後,日常操作只需要五個指令。新版的 Docker 直接用 docker compose(沒有連字號),舊版是 docker-compose,兩者等價:
docker compose up -d # 一鍵啟動所有服務
docker compose ps # 查看服務狀態
docker compose logs -f # 追蹤所有服務的日誌
docker compose down # 一鍵停止並刪除
docker compose build # 重新建構有 build: 的服務
一鍵啟動:up#
docker compose up -d
一次啟動 YAML 中所有服務,並自動處理:
- 建立專屬網路與具名 volume(沒有的話)
- 依
depends_on決定啟動順序 - 有
build:的服務,Image 不存在時自動建構
常用變化:
docker compose up # 前景執行,所有服務的日誌混印在終端機
docker compose up -d --build # 啟動前強制重新建構
docker compose up -d db # 只啟動某個服務(含其相依)
查看狀態與日誌#
docker compose ps # 這個專案的服務狀態(比 docker ps 乾淨)
docker compose logs # 所有服務的日誌
docker compose logs -f # 持續追蹤
docker compose logs -f api # 只追蹤某個服務
實務上前景
up就有「日誌混印」的效果(每行前面有服務名),但習慣上還是建議up -d+logs -f——終端機可以拿去做別的事,Ctrl+C 隨時離開且服務不中斷。
一鍵清理:down#
docker compose down
停止並刪除所有服務容器與 Compose 建立的網路。重要細節:
- 具名 volume(如
pgdata)不會被刪——資料庫資料安全 - 想連資料一起刪(大掃除):
docker compose down -v
docker compose down # 刪容器與網路,保留 volume
docker compose down -v # 連具名 volume 也刪(資料消失,慎用)
改了程式碼之後:日常開發循環#
# 改了程式碼(有 Bind Mount 掛載時):
# 簡單情況:容器內即時生效,什麼都不用做
# 有 build 的服務改了 Dockerfile 或依賴:
docker compose up -d --build
# 改了 docker-compose.yml:
docker compose up -d # Compose 會自動只重建受影響的服務
指令對照表#
| 想做的事 | docker run 世界 | Compose 世界 |
|---|---|---|
| 啟動整組服務 | 多行 docker run | docker compose up -d |
| 查看狀態 | docker ps -a(很雜) | docker compose ps |
| 查看日誌 | 對每個容器 docker logs | docker compose logs -f |
| 停止並清理 | 對每個容器 docker rm -f | docker compose down |
| 停止但保留容器 | 對每個容器 docker stop | docker compose stop |
| 重新建構 | docker build | docker compose up -d --build |
本章小結#
- 日常五指令:
up -d、ps、logs -f、down、build up -d一鍵啟動所有服務,自動處理網路、volume、順序down刪容器與網路,具名 volume 保留;down -v連資料一起刪(慎用)- 改程式碼後:Bind Mount 即時生效;改依賴用
up -d --build - Compose 讓「管理一組服務」像「管理一個容器」一樣簡單
想一想#
docker compose down和down -v的差別是什麼?什麼時候會不小心把資料庫清空?- 為什麼建議
up -d+logs -f,而不是前景up? - 把你的專案寫成 Compose 後,每天的開發循環是哪幾個指令?