Docker Compose 完整教學:由零開始學識 Multi-Container 管理(2026 實戰版)

Docker Compose 係乜嘢?點解你要學? 成日聽人講 Docker Compose 好方便,但係你又唔知佢究竟係乜?簡單講,Docker Compose 係 Docker 官方出嘅一個工具,俾你用一個 YAML 檔案就可以定義同管理多個 Container。正常 run Docker 要逐個 container 打 command,但用咗 Docker Compose,一個 docker...

Docker Compose 係乜嘢?點解你要學?

成日聽人講 Docker Compose 好方便,但係你又唔知佢究竟係乜?簡單講,Docker Compose 係 Docker 官方出嘅一個工具,俾你用一個 YAML 檔案就可以定義同管理多個 Container。正常 run Docker 要逐個 container 打 command,但用咗 Docker Compose,一個 docker compose up 就搞掂曬!

👉 延伸閲讀:Linux Server 安全加固 6 步搞掂 — Defense in Depth 實戰指南

今時今日做 IT Ops 或者 DevOps,Docker Compose 已經係基本技能。無論你係想喺 local 搭個 development environment,定係 production 部署 multi-service application,Docker Compose 都幫到你。

Docker Compose vs Docker Run:有咩分別?

先睇一個例子。假設你要 run 一個 WordPress site,需要 MySQL + WordPress 兩個 container。用 docker run 你要打:

docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=password -v mysql_data:/var/lib/mysql mysql:8.0
docker run -d --name wordpress -p 8080:80 -e WORDPRESS_DB_HOST=mysql --link mysql wordpress:latest

兩條 command 仲要記住次序、network、volume 全部 manual。但用 Docker Compose,你只需要一個 docker-compose.yml 檔案:

version: '3.8'
services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - mysql_data:/var/lib/mysql

  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: mysql
    depends_on:
      - mysql

volumes:
  mysql_data:

然後一個 command 搞掂:docker compose up -d。見到未?Docker Compose 將所有設定集中喺一個檔案,一目了然,version control 又方便!

Docker Compose 基本指令你要識

以下係日常用得最多嘅 Docker Compose 指令:

# 啟動所有 service(background mode)
docker compose up -d

# 睇下而家 run 緊咩
docker compose ps

# 睇 log
docker compose logs -f

# 停止所有 service
docker compose down

# 停止 + 刪除 volumes(徹底清場)
docker compose down -v

# rebuild image 再啟動
docker compose up -d --build

記住呢幾個 command,日常用 Docker Compose 已經夠曬。

Docker Compose 實戰:搭個 LAMP Stack

成日有人問點樣用 Docker Compose 搭 LAMP(Linux + Apache + MySQL + PHP)開發環境。以下係一個完整範例:

version: '3.8'
services:
  web:
    image: php:8.2-apache
    ports:
      - "8080:80"
    volumes:
      - ./www:/var/www/html
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: myapp
    volumes:
      - db_data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin:latest
    ports:
      - "8081:80"
    environment:
      PMA_HOST: db

volumes:
  db_data:

就係咁簡單!Docker Compose 令你可以喺 30 秒內起好一個完整嘅 LAMP stack,唔使裝 Apache、MySQL、PHP 喺 host machine 搞到亂曬龍。開發完咗一個 docker compose down -v 就清得乾乾淨淨。

Docker Compose 常用進階技巧

Environment Variables 管理

Docker Compose 支援 .env file,將敏感資料分開管理:

# .env file
MYSQL_ROOT_PASSWORD=my_secure_password
WORDPRESS_DB_USER=wp_user

docker-compose.yml 入面用 ${VARIABLE} 引用就得。

Network 自訂

默認 Docker Compose 會自動 create 一個 network,但你可以自訂:

networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge

然後喺每個 service 指定 networks: - frontend 就得。呢個做法喺 microservice architecture 特別有用。

Healthcheck

確保 service ready 先啟動下一個:

services:
  db:
    image: mysql:8.0
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

加咗 healthcheck 之後,depends_on 會等 MySQL 真係 ready 先起 web service,唔會出現 connection refused 嘅尷尬情況。

Docker Compose Production 部署注意事項

雖然 Docker Compose 喺 production 用得,但有幾點要注意:

  • 唔好用 default network — 自訂 network 同 subnet 避免衝突
  • set resource limit — 用 deploy.resources.limits 限制 CPU/Memory,避免一個 container 食曬所有資源
  • log rotation — 預設 Docker Compose log 會無限增長,記得 set logging.options.max-size
  • 唔好 expose 多餘 port — 只開放必要嘅 port,database port 唔應該 expose 出 internet
  • regular backup volumes — data volume 係 persistent data,要定期 backup

Docker Compose vs Kubernetes:點揀?

呢個係好多人問嘅問題。Docker Compose 適合單機 deployment、development environment、小型 project。如果你只需要 run 幾個 container 喺一部 server,用 Docker Compose 係最簡單直接嘅選擇。

Kubernetes 適合大規模、multi-node、需要 auto-scaling 嘅 production environment。簡單講:小型 project / 單機 → Docker Compose,大型 distributed system → Kubernetes。

總結

🔗 參考資料:NVD NIST 漏洞資料庫

Docker Compose 係現代 IT 人必學工具,佢將 multi-container application 嘅管理簡化到只需要一個 YAML file。由 local dev 到小型 production deployment,Docker Compose 都係最實用嘅選擇。今日學識佢,聽日返工即刻用得着!

#deployment #IT教學 #部署 #backup #技術分享