CodeGym /Adesua ahorow /Docker SELF /服務的擴展

服務的擴展

Docker SELF
等級 16 , 課堂 2
開放

8.1 指令 docker compose scale

服務的擴展是一個增加或減少執行相同服務的容器實例數量的過程,用於管理負載並確保應用程序的容錯能力。在 Docker Compose 中,服務的擴展使用 docker compose scale 指令(舊版)或新版本中的參數 --scale

擴展的核心概念:

  1. 可擴展性: 能夠根據當前負載輕鬆增加或減少服務實例數量。
  2. 容錯性: 運行多個服務實例可以確保容錯能力,因為單個實例的故障不會導致整個服務停止。
  3. 負載平衡: 在多個服務實例之間分配負載以優化性能。

使用指令 docker compose scale

指令語法:


docker compose scale SERVICE=NUM

參數含義:

  • SERVICE: 需要擴展的服務名稱。
  • NUM: 需要啟動的實例數量。

使用範例:

假設你有一個包含服務 web 定義的 compose.yaml 文件。

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

要啟動 3 個服務 web 的實例,可以使用以下指令:

Terminal

docker compose scale web=3

注意: 在執行 docker compose scale 指令之前,請確保使用 docker compose up 指令啟動服務。

在新版本中使用參數 --scale

在 Docker Compose 的新版本中,docker compose scale 指令被參數 --scale 所取代,與指令 up 一起使用。

Terminal

docker compose up --scale web=3

這種方法更推薦,因為它允許同時啟動和擴展服務。

8.2 實際示例

示例 1: Web 伺服器的擴展

創建文件 compose.yaml:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80-90:80"

啟動並將服務擴展到 3 個實例:

Terminal

docker compose up --scale web=3

現在你會有 3 個運行在範圍端口 80-90 的 Nginx Web 伺服器實例。

重要! 如果某個服務需要擴展到多個實例,必須指定端口範圍,例如:"80-90:80"。這會在主機機器上「預留」10 個端口的範圍。在增加服務的副本時,會為它分配範圍中的端口。如果不這樣做,端口會被隨機選擇,導致副本無法訪問。

示例 2: 與資料庫一起擴展

創建文件 compose.yaml:

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 個實例:

Terminal

docker compose up --scale web=4

現在你會有 4 個與單個 PostgreSQL 資料庫一起工作的 Nginx Web 伺服器實例。

8.3 管理可擴展的服務

在擴展服務之後,你可以使用 Docker Compose 的命令來管理實例。

檢視執行中的容器

使用指令 docker compose ps 來檢視所有執行中的容器:

Terminal

docker compose ps

停止並刪除可擴展的服務

若要停止並刪除服務的所有實例,請使用指令 docker compose down

Terminal

docker compose down

建議與提示:

  1. 負載平衡: 使用負載平衡器來分配流量至多個服務實例。比如,你可以使用 NginxHAProxy 來實現。
  2. 資料保存: 確保可擴展服務生成的資料保存在 volumes 或外部存儲中,以防止在停止或刪除容器時丟失資料。
  3. 監控: 使用監控工具,比如 PrometheusGrafana,來追蹤可擴展服務的性能和狀態。
  4. 自動擴展: 屬於考慮根據負載使用編排工具(如 KubernetesDocker Swarm)實施自動擴展服務的可能性。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION