部署到 Swarm

注意

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

如果您打算使用 Swarm 作為生產執行時環境,請使用 Swarm 模式。

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

先決條件

  • 獲取 Docker 中所述,下載並安裝 Docker Desktop。

  • 完成 Docker 工作坊第二部分 中的容器化應用程式。

  • 透過鍵入 docker system info,並查詢訊息 Swarm: active(您可能需要向上滾動一點)來確保 Swarm 在您的 Docker Desktop 上已啟用。

    如果 Swarm 未執行,只需在 shell 提示符中鍵入 docker swarm init 來設定它。

介紹

既然您已經證明了應用程式的各個元件可以作為獨立容器執行,並且展示瞭如何使用 Kubernetes 部署它,那麼您可以檢視如何安排 Swarm 管理它們。Swarm 提供了許多用於擴充套件、網路、安全和維護您的容器化應用程式的工具,這些工具超越了容器本身的能力。

為了驗證您的容器化應用程式在 Swarm 上執行良好,您將使用 Docker Desktop 內建的 Swarm 環境直接在您的開發機器上部署您的應用程式,然後再將其移交給生產環境中的完整 Swarm 叢集執行。Docker Desktop 建立的 Swarm 環境功能齊全,這意味著它具有您的應用程式在真實叢集中將享受的所有 Swarm 功能,可以從您的開發機器方便地訪問。

使用堆疊檔案描述應用程式

Swarm 從不會像您在上一步驟中那樣建立單個容器。相反,所有 Swarm 工作負載都作為服務進行排程,服務是可擴充套件的容器組,具有額外的網路功能,由 Swarm 自動維護。此外,所有 Swarm 物件都可以在堆疊檔案中進行描述,也應該進行描述。這些 YAML 檔案描述了 Swarm 應用程式的所有元件和配置,並且可以用來在任何 Swarm 環境中建立和銷燬您的應用程式。

現在,您可以編寫一個簡單的堆疊檔案來執行和管理您的 Todo 應用程式,該容器是 教程的第二部分 中建立的 getting-started 映象。將以下內容放在名為 bb-stack.yaml 的檔案中

注意

docker stack deploy 命令使用 Compose V1 使用的傳統 Compose 檔案版本 3 格式。最新格式由 Compose 規範 定義,與 docker stack deploy 命令不相容。

有關 Compose 演變的更多資訊,請參閱 Compose 的歷史

version: '3.7'

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

在這個 Swarm YAML 檔案中,有一個物件,一個 service,描述了一個可擴充套件的相同容器組。在本例中,您將獲得一個容器(預設值),並且該容器將基於您在 教程的第二部分 中建立的 getting-started 映象。此外,您還要求 Swarm 將到達開發機器上的埠 8000 的所有流量轉發到 getting-started 容器內部的埠 3000。

Kubernetes 服務和 Swarm 服務非常不同

儘管名稱相似,但這兩種編排器對“服務”一詞的含義大不相同。在 Swarm 中,服務提供排程和網路功能,建立容器並提供工具將流量路由到它們。在 Kubernetes 中,排程和網路是分別處理的,部署(或其他控制器)處理容器作為 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
    

    如果一切順利,您的服務將報告已建立了 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 應用程式,與您在 教程的第二部分 中將其作為獨立容器執行時相同。

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

    $ docker stack rm demo
    

結論

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

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

Swarm 和 CLI 參考

本文中使用的所有新 Swarm 物件和 CLI 命令的進一步文件如下所示