開發環境與生產環境

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 的網路和磁碟區設定——服務之間如何隔離、資料如何持久化。

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!