8.1 指令 docker compose scale
服務的擴展是一個增加或減少執行相同服務的容器實例數量的過程,用於管理負載並確保應用程序的容錯能力。在 Docker Compose 中,服務的擴展使用 docker compose scale
指令(舊版)或新版本中的參數 --scale
。
擴展的核心概念:
- 可擴展性: 能夠根據當前負載輕鬆增加或減少服務實例數量。
- 容錯性: 運行多個服務實例可以確保容錯能力,因為單個實例的故障不會導致整個服務停止。
- 負載平衡: 在多個服務實例之間分配負載以優化性能。
使用指令 docker compose scale
指令語法:
docker compose scale SERVICE=NUM
參數含義:
- SERVICE: 需要擴展的服務名稱。
- NUM: 需要啟動的實例數量。
使用範例:
假設你有一個包含服務 web 定義的 compose.yaml
文件。
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
要啟動 3 個服務 web 的實例,可以使用以下指令:
docker compose scale web=3
注意: 在執行 docker compose scale
指令之前,請確保使用 docker compose up
指令啟動服務。
在新版本中使用參數 --scale
在 Docker Compose 的新版本中,docker compose scale
指令被參數 --scale
所取代,與指令 up
一起使用。
docker compose up --scale web=3
這種方法更推薦,因為它允許同時啟動和擴展服務。
8.2 實際示例
示例 1: Web 伺服器的擴展
創建文件 compose.yaml
:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80-90:80"
啟動並將服務擴展到 3 個實例:
docker compose up --scale web=3
現在你會有 3 個運行在範圍端口 80-90 的 Nginx Web 伺服器實例。
重要!
如果某個服務需要擴展到多個實例,必須指定端口範圍,例如:"80-90:80"
。這會在主機機器上「預留」10 個端口的範圍。在增加服務的副本時,會為它分配範圍中的端口。如果不這樣做,端口會被隨機選擇,導致副本無法訪問。
示例 2: 與資料庫一起擴展
創建文件 compose.yaml
:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80-90:80"
depends_on:
- db
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
啟動並將 web
服務擴展到 4 個實例:
docker compose up --scale web=4
現在你會有 4 個與單個 PostgreSQL 資料庫一起工作的 Nginx Web 伺服器實例。
8.3 管理可擴展的服務
在擴展服務之後,你可以使用 Docker Compose 的命令來管理實例。
檢視執行中的容器
使用指令 docker compose ps
來檢視所有執行中的容器:
docker compose ps
停止並刪除可擴展的服務
若要停止並刪除服務的所有實例,請使用指令 docker compose down
:
docker compose down
建議與提示:
- 負載平衡: 使用負載平衡器來分配流量至多個服務實例。比如,你可以使用 Nginx 或 HAProxy 來實現。
- 資料保存: 確保可擴展服務生成的資料保存在 volumes 或外部存儲中,以防止在停止或刪除容器時丟失資料。
- 監控: 使用監控工具,比如 Prometheus 或 Grafana,來追蹤可擴展服務的性能和狀態。
- 自動擴展: 屬於考慮根據負載使用編排工具(如 Kubernetes 或 Docker Swarm)實施自動擴展服務的可能性。
GO TO FULL VERSION