部署到 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 命令的进一步文档如下所示