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 #技術分享



