部署到 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 命令的进一步文档可在此处找到

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