開發環境與生產環境
Vibe Prompt
「幫我建立 docker-compose.override.yml:開發模式開啟 hot reload、掛載原始碼目錄、加入 debug 工具。」
docker-compose.override.yml
services:
backend:
volumes:
- ./backend:/app # 掛載原始碼,修改即時生效
command: uvicorn main:app --host 0.0.0.0 --port 8000 --reload
# --reload 開啟熱重載
frontend:
volumes:
- ./frontend:/app
- /app/node_modules # 避免覆蓋 container 內的 node_modules
command: npm run dev # 開發模式
多環境策略
| 環境 | 指令 | 特性 |
|------|------|------|
| 開發 | docker compose up | 自動掛載 + hot reload |
| 測試 | docker compose -f compose.yml -f compose.test.yml up | 測試專用 DB |
| 正式 | docker compose -f compose.yml -f compose.prod.yml up -d | 最佳化建置 |
.env 管理
# .env (不提交到 Git)
DB_USER=myapp
DB_PASS=secret123
DB_NAME=myapp_dev
# .env.production
DB_USER=myapp_prod
DB_PASS=verysecret
DB_NAME=myapp_prod
關鍵要點
- ✅ 請根據本章主題補充具體的學習重點
- ✅ 建議加入比較表格、程式碼範例或流程圖
- ✅ 確保內容扎實且有價值
開發環境 vs 生產環境 Docker Compose 管理
多 Compose 檔案策略
使用多個 Compose 檔案來區分環境,透過 -f 參數合併:
# 開發環境
docker compose -f docker-compose.yml -f docker-compose.dev.yml up
# 生產環境
docker compose -f docker-compose.yml -f docker-compose.prod.yml up
差異對照表
| 配置 | 開發 (dev.yml) | 生產 (prod.yml) |
|------|:--------------:|:----------------:|
| 連接埠綁定 | "3000:3000" 直接暴露 | 透過 Reverse Proxy (Nginx) |
| 磁碟區 | Bind mount 原始碼目錄 | 僅命名磁碟區 |
| 熱重載 | ✅ nodemon 或 --watch | ❌ 編譯後的靜態檔案 |
| 資料庫 | 使用 Docker 內的 PostgreSQL | 使用託管資料庫 (RDS) |
| 除錯工具 | ✅ 加入 debug 端點 | ❌ 關閉所有除錯 |
| 日誌 | Console 輸出 | JSON 格式 + 日誌驅動 |
環境變數管理
# .env.dev
NODE_ENV=development
LOG_LEVEL=debug
API_URL=http://localhost:3000
# .env.prod
NODE_ENV=production
LOG_LEVEL=warn
API_URL=https://api.example.com
DB_PASSWORD=${DB_PASSWORD} # 從 CI/CD Secret 注入
Override 機制
Docker Compose 會自動讀取 docker-compose.override.yml(如果存在的話),讓開發者可以覆蓋特定設定:
# docker-compose.override.yml(僅存在開發者本機,不提交到 Git)
services:
app:
volumes:
- .:/app # bind mount 原始碼
command: npm run dev
Docker Compose 實戰要點
Docker Compose 是定義和執行多容器 Docker 應用的工具。用 YAML 檔案設定服務、網路、磁碟區。
為什麼重要?
在 production 部署中,你很少只跑一個容器。Compose 讓你把 Web Server、資料庫、快取、佇列全部定義在同一個 YAML 中,一行指令全部啟動。
多環境管理策略
開發環境可能需要 hot reload、除錯工具、Mock 服務;正式環境需要資源限制、自動重啟、監控。Compose 用多個 YAML 檔案疊加來處理這種差異。
環境分層
# 基礎設定(所有環境共用)
docker-compose.yml
# 開發環境覆寫
docker-compose.override.yml # 預設自動套用
# 正式環境覆寫
docker-compose.prod.yml # 需手動指定
執行方式
# 開發環境(override 自動套用)
docker compose up -d
# 正式環境(指定 prod 設定)
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
正式環境的設定可能包含:resource limits、restart: always、healthcheck、不同的環境變數值。
下一章預告:網路與磁碟區
環境設定好之後,下一章深入 Compose 的網路和磁碟區設定——服務之間如何隔離、資料如何持久化。