多服務架構設計

Vibe Prompt

「幫我寫一個 docker-compose.yml:

  1. Next.js 前端(build ./frontend, port 3000)
  2. FastAPI 後端(build ./backend, port 8000)
  3. PostgreSQL 16(port 5432)
  4. Redis 7(port 6379)
  5. 前端依賴後端,後端依賴資料庫
  6. 所有服務共用一個 network。」

compose.yml

version: "3.8"

services:
  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASS}
      POSTGRES_DB: ${DB_NAME}
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${DB_USER}"]
      interval: 5s
      timeout: 5s
      retries: 5

  backend:
    build: ./backend
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_started
    environment:
      DATABASE_URL: postgresql://${DB_USER}:${DB_PASS}@postgres:5432/${DB_NAME}
      REDIS_URL: redis://redis:6379
    ports:
      - "8000:8000"

  frontend:
    build: ./frontend
    depends_on:
      - backend
    environment:
      NEXT_PUBLIC_API_URL: http://backend:8000
    ports:
      - "3000:3000"

  redis:
    image: redis:7-alpine

volumes:
  pgdata:

常用指令

docker compose up -d                 # 背景啟動
docker compose logs -f               # 即時日誌
docker compose up -d --build         # 重新建置
docker compose down                  # 停止
docker compose down -v               # 停止並刪除 volume

關鍵要點

  • ✅ 請根據本章主題補充具體的學習重點
  • ✅ 建議加入比較表格、程式碼範例或流程圖
  • ✅ 確保內容扎實且有價值


Docker Compose 實戰要點

Docker Compose 是定義和執行多容器 Docker 應用的工具。用 YAML 檔案設定服務、網路、磁碟區。

為什麼重要?

在 production 部署中,你很少只跑一個容器。Compose 讓你把 Web Server、資料庫、快取、佇列全部定義在同一個 YAML 中,一行指令全部啟動。

多服務架構的挑戰

當你的專案同時有前端、後端、資料庫時,手動啟動三個服務既麻煩又容易出錯。Compose 讓你可以一次啟動整個堆疊。

服務間通訊

services:
  frontend:
    build: ./frontend
    ports: ["3000:3000"]
    environment:
      - NEXT_PUBLIC_API_URL=http://backend:8000

  backend:
    build: ./backend
    ports: ["8000:8000"]
    environment:
      - DATABASE_URL=postgres://user:pass@db:5432/myapp
    depends_on:
      - db

  db:
    image: postgres:15
    volumes: ["pgdata:/var/lib/postgresql/data"]

注意 http://backend:8000——Compose 會自動建立 DNS 解析,服務名稱就是 hostname。

下一章預告:開發 vs 正式環境

多服務架構在開發和正式環境的設定不同——正式環境可能用不同的 port、不同的資源限制、需要 SSL。下一章教你用多組 Compose 檔案管理不同環境。

會員專屬免費教學

本章節為註冊會員專屬的免費開放內容!請先登入或註冊會員,即可立即解鎖閱讀。

立即登入 / 註冊