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),以及它們之間的網路通訊設定。

會員專屬免費教學

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

立即登入 / 註冊