在現代應用開發中,微服務架構已成為主流,而 Docker 提供了優秀的 Containerlize 解決方案。但當需要同時管理多個 Container 時,手動啟動與配置每個 Container 可能得繁瑣,這時候 Docker Compose 就派上用場。本文將介紹 Docker Compose 的基本概念、使用方式以及實際應用場景,幫助您快速掌握這項工具。
什麼是 Docker Compose?
Docker Compose 是一個用來定義和管理多個 Docker Container 的工具。透過編寫 docker-compose.yml
檔案,可以使用簡單的命令來同時啟動、停止和協調多個 Container,讓應用程式各組件能夠順暢的一同運作。
優勢
- 簡化多個 Container 管理:使用 YAML 文件一次性定義所有 Container ,省去繁瑣的指令操作。
- 環境一致性:確保開發、測試、部署環境一致。
- 自動化服務啟動:設定依賴關係,按順序啟動 Container 。
- 支援擴展性:輕鬆擴展或縮小 Container 數量,適應不同需求。
基本架構
docker-compose.yml
文件包含以下幾個部分:
1 | version: '1' |
version
: 指定 Compose 文件的版本。services
: 定義應用服務,EX:web
(NGINX)與db
(MySQL)。image
: 指定使用的 Docker image。ports
: 將容器內部 Port 映射到主機。volumes
: 掛載主機目錄到容器內。environment
: 設置環境變數,例如 MySQL 的 root 密碼。
基本指令
啟動與管理容器
指令 | 功能說明 |
---|---|
docker-compose up |
啟動所有服務 |
docker-compose up -d |
以背景模式運行容器 |
docker-compose down |
停止並移除所有容器 |
docker-compose ps |
查看運行中容器的狀態 |
docker-compose logs |
查看容器日誌 |
docker-compose restart |
重新啟動服務 |
docker-compose build |
建立 image 檔,通常用於自定義 Dockerfile |
使用範例
範例:簡單的 LAMP 環境(Linux + Apache + MySQL + PHP)
1 | version: '3.8' |
啟動該應用環境:
1 | docker-compose up -d |
瀏覽 http://localhost:8080
,即可看到運行的網站。
應用場景
Docker Compose 適合以下情境:
- 開發與測試環境搭建:快速啟動所需服務(EX: 資料庫、快取、API)。
- CI/CD 自動化測試:在 CI/CD 流水線中管理多個微服務。
- 本機模擬雲端架構:模擬實際部署環境,提升開發一致性。
進階功能介紹
多環境配置
可以使用多個 Compose 文件來管理不同的環境,例如:
1 | docker-compose -f docker-compose.dev.yml up |
擴展與縮放
使用以下指令快速擴展服務數量:
1 | docker-compose up --scale web=3 |
常見問題與除錯
Container 啟動失敗
- 檢查
docker-compose logs
取得詳細錯誤資訊。 - 確保 YAML 文件格式正確,避免縮排錯誤。
Port 衝突
- 確保主機 Port 未被其他應用佔用,或修改
ports
設定。
無法連接容器間服務
- 使用服務名稱而非 IP,例如
db
連接mysql
而非localhost
。