部署到 Swarm

注意

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

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

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

先決條件

  • 按照獲取 Docker中的說明下載並安裝 Docker Desktop。

  • Docker 研討會第 2 部分中完成應用程式的容器化。

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

    如果 Swarm 未執行,只需在 shell 提示符下鍵入 docker swarm init 即可進行設定。

簡介

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

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

使用堆疊檔案描述應用

Swarm 從不像您在本教程上一步中所做的那樣建立單個容器。相反,所有 Swarm 工作負載都作為服務進行排程,服務是可擴充套件的容器組,具有由 Swarm 自動維護的附加網路功能。此外,所有 Swarm 物件都可以並且應該在稱為堆疊檔案的清單中進行描述。這些 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 中,排程和網路是分開處理的,部署(或其他控制器)負責將容器排程為 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 應用程式,與您在教程第 2 部分中將其作為獨立容器執行時一樣。

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

    $ docker stack rm demo
    

結論

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

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

Swarm 和 CLI 參考

本文中使用的所有新的 Swarm 物件和 CLI 命令的進一步文件可在此處找到