Docker Compose 教學:由零開始搞掂多容器應用部署

# Docker Compose 教學:由零開始搞掂多容器應用部署 做 IT 嘅你一定聽過 Docker,但當你個 application 越嚟越複雜,要同時 run 幾個 containers(例如 web server + database + cache),逐個 `docker run` 真係搞到頭都大。呢個時候,**Docker Compose** 就係你嘅救星。 今日就同大家由零開始,用...

Compose 教學:做 IT 嘅你一定聽過 Docker,但當你個 application 越嚟越複雜,要同時 run 幾個 containers(例如 web server + database + cache),逐個 docker run 真係搞到頭都大。呢個時候,Docker Compose 就係你嘅救星。

今日就同大家由零開始,用 Docker Compose 搞掂一個 WordPress + MySQL + Redis 嘅完整部署。冇廢話,即刻開波!

Docker Compose 係咩?點解你要用?

Docker Compose 教學:由零開始搞掂多容器應用部署 - 文章重點速覽 infographic

Docker Compose 係 Docker 官方出嘅容器編排工具,用一個 YAML 檔案(docker-compose.yml)就可以定義晒所有 containers、networks、volumes 嘅設定。一條 command 就部署晒成個 stack,慳時間又唔會漏設定。

Docker Compose 嘅三大好處:

  • 一條 command 搞掂晒docker compose up -d 就部署晒所有服務
  • 環境一致 — 開發、測試、生產環境用同一份 YAML,唔會出現「我部機郁到喎」嘅經典問題
  • 易管理 — 所有服務定義集中喺一個 file,唔使記住成堆 docker run 參數

Docker Compose 安裝(macOS / Linux)

macOS 用家裝 Docker Desktop 已經包埋 Docker Compose。Linux 嘅話:



# Ubuntu/Debian

sudo apt update && sudo apt install docker-compose-plugin -y



# 確認安裝

docker compose version

# Docker Compose version v2.27.0

⚠️ 留意:新版用 docker compose(空格),舊版係 docker-compose(dash)。2026 年絕大部分 distro 都已經轉咗新版。

Docker Compose 實戰:WordPress + MySQL + Redis

以下係一個完整嘅 docker-compose.yml,部署一個生產級 WordPress 網站:



version: "3.8"



services:

  wordpress:

    image: wordpress:6.6-php8.3-apache

    container_name: wp-app

    ports:

      - "8080:80"

    environment:

      WORDPRESS_DB_HOST: db

      WORDPRESS_DB_USER: wpuser

      WORDPRESS_DB_PASSWORD: wppass

      WORDPRESS_DB_NAME: wordpress

      WORDPRESS_REDIS_HOST: cache

    volumes:

      - wp_data:/var/www/html

    depends_on:

      db:

        condition: service_healthy

      cache:

        condition: service_started

    restart: unless-stopped



  db:

    image: mysql:8.0

    container_name: wp-db

    environment:

      MYSQL_ROOT_PASSWORD: rootpass

      MYSQL_DATABASE: wordpress

      MYSQL_USER: wpuser

      MYSQL_PASSWORD: wppass

    volumes:

      - db_data:/var/lib/mysql

    healthcheck:

      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]

      interval: 10s

      timeout: 5s

      retries: 5

    restart: unless-stopped



  cache:

    image: redis:7-alpine

    container_name: wp-cache

    volumes:

      - cache_data:/data

    restart: unless-stopped



volumes:

  wp_data:

  db_data:

  cache_data:

Step-by-Step 部署

Step 1: Save 上面個 YAML 做 docker-compose.yml

Step 2: 一行 command 部署晒:



docker compose up -d

你會見到類似 output:



[+] Running 3/3

 ✔ Container wp-cache  Started

 ✔ Container wp-db     Healthy

 ✔ Container wp-app    Started

Step 3: 確認所有 containers 行緊:



docker compose ps

Step 4: 打開 browser 去 http://localhost:8080,你已經見到 WordPress 安裝畫面!

Docker Compose 常用管理指令

部署完之後,日常管理靠呢幾條 command 就夠:



# 睇 logs(實時追蹤)

docker compose logs -f



# 只睇特定 service

docker compose logs -f wordpress



# 停止所有服務

docker compose down



# 停止並刪除 volumes(⚠️ 會鏟晒數據!)

docker compose down -v



# 重新 build + 部署(改咗 Dockerfile 之後)

docker compose up -d --build



# 只重啟某個 service

docker compose restart db



# 進入 container shell

docker compose exec wordpress bash



# 擴展多個 instances(如果 service 設計支援)

docker compose up -d --scale wordpress=3

Docker Compose 生產環境貼士

  • 唔好 hardcode secrets — 用 .env file + ${VARIABLE} 語法,唔好將密碼寫死喺 YAML
  • set resource limitsdeploy.resources.limits 設定 CPU/memory 上限,防止一個 container 食晒資源
  • 用 healthcheck — 特別係 database,確保 dependents 唔會喺 DB 未 ready 就啟動
  • network 隔離 — 用 custom networks 分隔 frontend/backend 流量
  • 定時 backup volumes — 用 cron job 定期 backup 你嘅 Docker volumes


# .env file example

MYSQL_ROOT_PASSWORD=SuperSecure123!

WORDPRESS_DB_PASSWORD=AnotherSecure456!

YAML 入面改為:



environment:

  MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

Docker Compose 進階技巧

Profile-based 部署

有啲服務只喺開發環境需要,可以用 profiles



services:

  phpmyadmin:

    image: phpmyadmin:latest

    profiles:

      - dev

    ports:

      - "8081:80"

開發時:docker compose --profile dev up -d

生產時唔加 --profile dev 就唔會啟動 phpMyAdmin。

Override files



# 基礎設定

docker-compose.yml



# 生產 override(加 TLS、resource limits)

docker-compose.prod.yml



# 合併執行

docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

Docker Compose 總結:必學 DevOps 工具

Compose 係現代 DevOps 必學工具,由 local dev 到 production deployment 都用到。一條 YAML 搞掂晒 multi-container 部署,乾淨、可重複、易維護。記住:與其每次打 5 條 docker run,不如花 5 分鐘寫個 docker-compose.yml,之後就一世輕鬆。

📌 延伸閱讀:

🔗 參考資料: Docker Compose 官方文檔

#DockerCompose #Docker #DevOps #Container #WordPress #MySQL #Redis #IT教學