跳轉到

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 讓「管理一組服務」像「管理一個容器」一樣簡單

想一想#

  1. docker compose down 和 down -v 的差別是什麼?什麼時候會不小心把資料庫清空?
  2. 為什麼建議 up -d + logs -f,而不是前景 up?
  3. 把你的專案寫成 Compose 後,每天的開發循環是哪幾個指令?