Compose YAML 深入
Vibe Prompt
「幫我解釋 docker-compose.yml 的每個欄位:version、services、networks、volumes、depends_on、healthcheck,用生活比喻說明。」
基礎結構
version: "3.8"
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:16
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
關鍵欄位
- build: 從 Dockerfile 建置
- image: 直接使用現有映像
- ports: 連接埠映射
- volumes: 資料持久化
- depends_on: 啟動順序
- healthcheck: 健康檢查
- environment: 環境變數
- restart: 重啟策略
關鍵要點
- ✅ 請根據本章主題補充具體的學習重點
- ✅ 建議加入比較表格、程式碼範例或流程圖
- ✅ 確保內容扎實且有價值
Docker Compose YAML 深入解析
版本差異
| 版本 | 推出年份 | 主要特性 | |:----:|:--------:|---------| | v2 | 2016 | 基本多容器定義 | | v3 | 2017 | Swarm 整合、Deploy 區塊 | | v3.8+ | 2020 | 支援 GPU、環境變數插值 |
注意:現代 Docker Compose V2(docker compose,無短線)已不再需要 version: 欄位。
常用指令對照
| 舊版 (docker-compose) | 新版 (docker compose) |
|:---------------------:|:---------------------:|
| docker-compose up | docker compose up |
| docker-compose down | docker compose down |
| docker-compose logs | docker compose logs |
| docker-compose exec | docker compose exec |
完整生產級範例
services:
app:
build:
context: .
dockerfile: Dockerfile.prod
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DATABASE_URL=postgres://user:pass@db:5432/app
depends_on:
db:
condition: service_healthy
restart: unless-stopped
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
db:
image: postgres:16-alpine
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "user"]
interval: 5s
timeout: 3s
retries: 5
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_DB=app
redis:
image: redis:7-alpine
command: redis-server --requirepass ${REDIS_PASSWORD}
healthcheck:
test: ["CMD", "redis-cli", "ping"]
volumes:
pgdata:
Docker Compose 實戰要點
Docker Compose 是定義和執行多容器 Docker 應用的工具。用 YAML 檔案設定服務、網路、磁碟區。
為什麼重要?
在 production 部署中,你很少只跑一個容器。Compose 讓你把 Web Server、資料庫、快取、佇列全部定義在同一個 YAML 中,一行指令全部啟動。
Docker Compose YAML 的關鍵欄位
| 欄位 | 用途 | 範例 |
|:----|:----|:----|
| services | 定義每個容器 | web、db、redis |
| build | 從 Dockerfile 建置映像 | ./docker/web |
| image | 使用現成的映像 | postgres:15 |
| ports | 埠號對應 | "3000:3000" |
| environment | 環境變數 | DATABASE_URL=postgres://... |
| depends_on | 容器啟動順序 | db 先啟動,web 再啟動 |
為什麼要學 Compose YAML?
Compose YAML 是你的基礎設施規格書。團隊成員看到 docker-compose.yml 就知道這個專案需要哪些服務、怎麼啟動——不需要查文件或問人。
下一章預告:多服務部署
這一章的 Compose YAML 只跑了一個服務。下一章加入多個服務(Web + API + DB),以及它們之間的網路通訊設定。