部署到 Swarm

注意

Swarm 模式是管理 Docker 守護行程叢集的高階功能。

如果您打算將 Swarm 用作正式環境執行階段,請使用 Swarm 模式。

如果您不打算使用 Swarm 部署,請改用 Docker Compose。如果您是為 Kubernetes 部署進行開發,請考慮使用 Docker Desktop 中的 整合式 Kubernetes 功能

先決條件

  • 依照 取得 Docker 中的說明下載並安裝 Docker Desktop。

  • 請透過 Docker 工作坊第 2 部分練習將應用程式容器化。

  • 輸入 docker system info 並檢查是否有 Swarm: active 訊息(可能需要向上捲動),確保您的 Docker Desktop 已啟用 Swarm。

    如果 Swarm 未執行,只需在 Shell 提示字元輸入 docker swarm init 即可完成設定。

簡介

既然您已經展示了應用程式的各個組件如何以獨立容器執行,並示範了如何使用 Kubernetes 部署它,現在您可以看看如何將它們交由 Docker Swarm 管理。相較於容器本身的功能,Swarm 提供了許多額外工具,可用於擴展、網路連線、安全性維護以及維護容器化應用程式。

為了驗證您的容器化應用程式在 Swarm 上運作良好,您將在開發機器上直接使用 Docker Desktop 內建的 Swarm 環境部署應用程式,之後再交由正式環境中完整的 Swarm 叢集執行。由 Docker Desktop 建立的 Swarm 環境功能完備,這意味著它具備您的應用程式在真實叢集上所能享有的所有 Swarm 功能,並且可以從您的開發機器上輕鬆存取。

使用堆疊檔案 (stack files) 描述應用程式

Swarm 不會像本教學的前一個步驟那樣建立個別容器。相反地,所有的 Swarm 工作負載都是以「服務 (services)」的形式排程,這些服務是由 Swarm 自動維護,並具備額外網路功能的擴充性容器群組。此外,所有 Swarm 物件都可以且應該在稱為「堆疊檔案 (stack files)」的清單中描述。這些 YAML 檔案描述了 Swarm 應用程式的所有組件與配置,並可用於在任何 Swarm 環境中建立與銷毀您的應用程式。

現在,您可以撰寫一個簡單的堆疊檔案來執行與管理您的 Todo 應用程式(即在教學的第 2 部分中建立的 getting-started 容器映像)。將以下內容放入名為 bb-stack.yaml 的檔案中。

注意

docker stack deploy 指令使用舊版的 Compose 檔案第 3 版格式,該格式由 Compose V1 使用。由 Compose 規範定義的最新格式與 docker stack deploy 指令不相容。

關於 Compose 演進的更多資訊,請參閱 Compose 的歷史

version: "3.7"

services:
  bb-app:
    image: getting-started
    ports:
      - "8000:3000"

在這個 Swarm YAML 檔案中,有一個物件,即 service,它描述了一組可擴展的相同容器。在這種情況下,您將只會獲得一個容器(預設值),而該容器將基於您在教學的第 2 部分中建立的 getting-started 映像。此外,您已要求 Swarm 將到達您開發機器上 8000 連接埠的所有流量,轉發至您的 getting-started 容器內部的 3000 連接埠。

Kubernetes 服務與 Swarm 服務大不相同

儘管名稱相似,這兩個編排器所指的「服務」含義大不相同。在 Swarm 中,服務提供排程與網路功能,不僅建立容器,還提供將流量路由至容器的工具。在 Kubernetes 中,排程與網路是分開處理的:部署 (Deployments) 或其他控制器負責容器作為 Pod 的排程,而服務僅負責為這些 Pod 新增網路功能。

部署並檢查您的應用程式

  1. 部署您的應用程式至 Swarm

    $ docker stack deploy -c bb-stack.yaml demo
    

    如果一切順利,Swarm 將回報已建立所有堆疊物件且沒有任何錯誤。

    Creating network demo_default
    Creating service demo_bb-app

    請注意,除了您的服務外,Swarm 預設也會建立一個 Docker 網路,以隔離作為堆疊一部分部署的容器。

  2. 透過列出您的服務來確保一切運作正常。

    $ docker service ls
    

    如果一切順利,您的服務將回報其副本 (replicas) 已建立 1/1。

    ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
    il7elwunymbs        demo_bb-app         replicated          1/1                 getting-started:latest   *:8000->3000/tcp

    這表示您作為服務一部分所要求的 1/1 容器已啟動並執行。此外,您可以看到開發機器上的 8000 連接埠正被轉發至您的 getting-started 容器中的 3000 連接埠。

  3. 打開瀏覽器並造訪位於 localhost:8000 的 Todo 應用程式;您應該會看到您的 Todo 應用程式,與您在教學的第 2 部分中將其作為獨立容器執行時相同。

  4. 滿意後,請拆除您的應用程式。

    $ docker stack rm demo
    

結論

此時,您已成功使用 Docker Desktop 將應用程式部署到開發機器上功能完備的 Swarm 環境中。現在您可以為應用程式新增其他組件,並直接在自己的機器上利用 Swarm 的所有功能與強大威力。

除了部署到 Swarm 之外,您也將應用程式描述為一個堆疊檔案。這個簡單的文字檔案包含了建立應用程式並使其處於執行狀態所需的一切;您可以將其簽入版本控制並與同事分享,讓您能夠將應用程式發布到其他叢集(例如開發環境之後的測試與正式環境叢集)。

Swarm 與 CLI 參考

本文中使用所有新 Swarm 物件與 CLI 指令的進一步文件可在此處取得:

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.