Docker Compose 完整教學:如何快速管理多容器應用?

Docker Compose 完整教學:如何快速管理多容器應用?

在現代 DevOps 與微服務架構中,一個應用系統通常由多個服務組成,例如 Web Server、資料庫、快取服務與 API Server。若每個容器都需要手動啟動,管理與部署會非常複雜。Docker Compose 是 Docker 官方提供的多容器管理工具,可以透過 docker-compose.yml 設定檔描述整個應用系統架構,只需一個指令即可同時啟動多個服務並自動建立網路與依賴關係。

為什麼使用 Docker Compose

如果沒有 Docker Compose,部署一個包含 Nginx、MySQL、Redis 的系統,可能需要多次執行 docker run 指令並手動配置 Port、Network 與環境變數。

  • 統一管理多個容器
  • 簡化 DevOps 部署流程
  • 快速建立開發與測試環境
  • 容器之間自動建立網路
  • 方便 CI/CD 自動化

常用指令與說明


# 啟動所有服務(背景模式)
docker-compose up -d
# -d 代表 background 執行,不會佔用 terminal

# 停止並移除容器
docker-compose down
# down 會停止所有容器並移除網路與卷

# 查看容器狀態
docker-compose ps
# 列出目前所有服務容器狀態

# 查看服務日誌
docker-compose logs
# 可加服務名稱查看特定日誌,例如 docker-compose logs wordpress

# 重新啟動服務
docker-compose restart
# 重新啟動容器,更新設定立即生效

# 更新 Docker Image
docker-compose pull
# 下載最新映像檔,然後可重新啟動容器

範例:WordPress + MySQL


version: "3"
services:
 wordpress:
  image: wordpress          # 使用官方 WordPress 映像檔
  ports:
   - "8080:80"              # 對應本機 8080 port 到容器 80 port
  environment:
   WORDPRESS_DB_HOST: db     # 連接資料庫服務名稱
   WORDPRESS_DB_USER: root   # DB 帳號
   WORDPRESS_DB_PASSWORD: example  # DB 密碼
 db:
  image: mysql:8             # 使用 MySQL 8
  environment:
   MYSQL_ROOT_PASSWORD: example  # 設定 root 密碼

部署後檢查:


docker-compose ps
curl http://localhost:8080
# 查看容器運作狀態與測試網站是否可訪問

案例 2:Node.js + MongoDB


version: "3"
services:
 node-app:
  image: node:18              # Node.js 官方映像檔
  working_dir: /app            # 工作目錄
  volumes:
   - ./:/app                  # 將本地專案掛載到容器 /app
  command: "node index.js"     # 啟動 Node.js 應用
  ports:
   - "3000:3000"               # 對應本機 3000 port
  depends_on:
   - mongo                     # 啟動前依賴 mongo 容器
 mongo:
  image: mongo:6                # MongoDB 官方映像檔
  ports:
   - "27017:27017"              # 對應本機 27017 port

部署後檢查:


docker-compose ps
docker-compose logs node-app
curl http://localhost:3000
# 查看容器狀態、日誌與測試應用

案例 3:Python Flask + Redis + PostgreSQL


version: "3"
services:
 flask-app:
  image: python:3.11          # Python 官方映像檔
  working_dir: /app
  volumes:
   - ./:/app                  # 掛載專案資料
  command: "python app.py"     # 啟動 Flask 應用
  ports:
   - "5000:5000"               # 本機 5000 port 對應容器 5000
  depends_on:
   - redis                     # 依賴 redis 容器
   - db                        # 依賴 db 容器
 redis:
  image: redis:7               # Redis 官方映像檔
  ports:
   - "6379:6379"               # 對應本機 6379 port
 db:
  image: postgres:15           # PostgreSQL 官方映像檔
  environment:
   POSTGRES_PASSWORD: example  # 設定資料庫密碼
  ports:
   - "5432:5432"               # 對應本機 5432 port

部署後檢查:


docker-compose ps
docker-compose logs flask-app
curl http://localhost:5000
# 查看容器狀態與測試 Flask 網站

排錯技巧


docker-compose logs
# 查看容器日誌,找出錯誤訊息
docker-compose ps
# 確認容器是否啟動
docker-compose down
# 停止並清理所有容器,重新部署

FAQ 常見問題

Docker Compose 與 Dockerfile 差異是什麼?

Dockerfile 用於建立 Image,而 Docker Compose 管理多個容器服務。Dockerfile 描述映像檔建立方式,Compose 負責系統部署與多容器協調。

Docker Compose 可以用於正式環境嗎?

小型專案可使用 Compose 部署,對大型系統建議 Kubernetes。Compose 適合單機部署與開發測試,部署時仍建議搭配備份與監控。

docker-compose.yml 可以定義多少服務?

可定義多個服務,例如 Web、Database、Redis 等,Compose 會自動建立網路並管理依賴順序。

如何重新啟動服務?

使用 docker-compose restart 可重新啟動所有服務,適合更新設定後立即生效。

如何更新 Docker Image?

先執行 docker-compose pull 下載最新 Image,再使用 docker-compose up -d 重新建立容器。

docker-compose stop 與 down 差異?

stop 只停止容器,down 會停止並移除容器、網路與卷。down 適合完全重建環境。

Docker Compose 適合開發環境嗎?

非常適合,開發者只需 docker-compose up 就可快速建立完整開發環境,節省配置時間。

Docker Compose 與 Kubernetes 差別?

Compose 適合單機部署與測試,Kubernetes 適合大型叢集、擴展與自動化管理,兩者各有適用場景。

    PAGE TOP