CodeGym /Adesua ahorow /Docker SELF /Docker Swarm 的介紹

Docker Swarm 的介紹

Docker SELF
等級 18 , 課堂 0
開放

6.1 Docker Swarm 的基本概念

Docker Swarm 是 Docker 提供的一個內建的容器調度系統。它可以讓你建立、管理和擴展 Docker 主機的叢集,把它們轉變成一個單一的邏輯主機,在這個主機上可以運行容器。Swarm 會自動在節點之間分配任務,提供了便利性與容錯性。在這堂課裡,我們會探討主要組件和管理 Docker Swarm 所需的基本指令。

Docker Swarm 的基本概念:

  1. 叢集 (Swarm): 一組整合成單一邏輯叢集的 Docker 主機。
  2. 管理節點 (Managers): 負責管理叢集並分配任務給工作節點的節點。
  3. 工作節點 (Workers): 運行任務並啟動容器的節點。
  4. 服務 (Services): 一種對應程式的邏輯概念,描述需要完成什麼任務以及應該啟動多少容器實例。
  5. 任務 (Tasks): 是服務的實例化容器,為單一容器單位。

Docker Swarm 的架構:

Docker Swarm 採用了基於管理節點和工作節點的架構。管理節點管理叢集的狀態,而工作節點執行分配的任務。

管理節點:

  • 管理叢集的狀態和組態。
  • 在工作節點之間分配任務。
  • 提供容錯性和高可用性(擁有多個管理節點時)。

工作節點:

  • 執行由管理節點指定的任務。
  • 根據任務啟動容器。

Docker Swarm 的基本指令:

  1. docker swarm init: 初始化一個新的 Swarm 叢集。
  2. docker swarm join: 加入現有的叢集。
  3. docker node ls: 查看叢集中的節點列表。
  4. docker service create: 建立一個新的服務。
  5. docker service ls: 查看已啟動的服務。
  6. docker service scale: 調整服務至特定數量的實例。
  7. docker service rm: 從叢集中刪除服務。

使用 Docker Swarm 可以簡化分散式系統中應用程式的管理,提供容錯性、可擴展性以及便捷的部署方式。

6.2 建立 Docker Swarm 集群

建立並管理 Docker Swarm 集群

步驟 1: 初始化集群

在第一個主機(manager)執行下面的指令:

Terminal

docker swarm init --advertise-addr <MANAGER_IPl>

這個指令會初始化一個新的 Swarm 集群,將當前節點設為 manager,並輸出加入 worker 節點的命令。

步驟 2: 加入 worker 節點

在其他主機執行 docker swarm init 命令時輸出的指令,將它們加入集群:

Terminal

docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377

其中:

  • <SWARM_TOKEN>: 連接到集群的 token(由 docker swarm init 命令生成)。
  • <MANAGER_IP>: manager 節點的 IP 位址。

步驟 3: 檢視節點

要檢視集群中的所有節點,可以使用這個命令:

Terminal

docker node ls

這個命令會顯示所有節點的清單,包括它們的角色、狀態和可用性。

docker node ls 命令的輸出範例

Terminal

ID                                    HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
qwertyuiop12345    manager-node        Ready               Active             Leader
asdfghjkl67890      worker-node1       Ready               Active
zxcvbnm09876       worker-node2       Ready               Active

欄位解釋:

  • ID: 節點的唯一識別碼。
  • HOSTNAME: 運行節點的主機名。
  • STATUS: 節點的當前狀態(例如 Ready)。
  • AVAILABILITY: 節點的可用性(例如 Active)。
  • MANAGER STATUS: 顯示節點是否為 manager(例如 Leader, Reachable)或 worker(空白)。

現在 Docker Swarm 集群已經配置完成,你可以開始建立和擴展應用程式了。

6.3 管理 Docker Swarm

管理 Docker Swarm 中的服務

1. 創建服務

創建一個具有指定副本數量的服務:

Terminal

docker service create --name my_web --replicas 3 -p 8080:80 nginx

在這個範例中,創建了一個名為 my_web 的服務,啟動了 3 個 Nginx 實例。容器將埠 80 曝光為主機的埠 8080。

2. 查看服務

要查看叢集中所有運行中的服務,請使用以下指令:

Terminal

docker service ls

指令 docker service ls 的輸出範例

Terminal

ID                     NAME         MODE           REPLICAS     IMAGE
ab12345               my_web       replicated     3/3          nginx:latest

3. 服務擴展

為更改服務的實例(副本)數量,請使用指令 docker service scale

Terminal

docker service scale my_web=5

現在服務 my_web 將有 5 個實例。

4. 更新服務

要更新服務映像到新版本,請使用指令 docker service update

Terminal

docker service update --image nginx:latest my_web

確保高可用性

Docker Swarm 通過以下方式支持高可用性:

  1. 任務分配:在叢集節點之間分配任務,以在故障時自動恢復容器。
  2. 支持多個管理者:建議使用奇數數量的管理者(例如 3 或 5),以避免共識問題。
  3. 使用副本:為每個服務設置多個副本,以提高容錯能力。

共識的概念

共識是一種大多數節點同意某個操作(例如數據寫入或領袖選舉)的概念,該操作才能被認為是有效的。例如,在一個由 5 個節點組成的叢集中,共識需要至少 3 個節點。

有用的建議! 確保管理者分佈在不同的實體或雲服務伺服器上,以最大限度地減少同時發生故障的風險。

6.4 Docker Compose 配置範例用於 Docker Swarm

Docker Compose 可以和 Docker Swarm 一起使用以簡化多容器應用程序的管理。

docker-compose.yml 文件的示例

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "8080-8090:80"
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure
    networks:
      - my_overlay_network

  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: example
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
    networks:
      - my_overlay_network

networks:
  my_overlay_network:
    driver: overlay
    

Swarm 中啟動 Docker Compose 堆棧

要在 Docker Swarm 中部署堆棧,使用以下命令:

Terminal

docker stack deploy -c docker-compose.yml mystack

查看堆棧

查看已部署的堆棧:

Terminal

docker stack ls

查看堆棧中的服務

Terminal

docker stack services mystack
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION