Deploy to Swarm

预计阅读时间:5分钟

Prerequisites

  • 按照Orientation and setup中的说明下载并安装 Docker Desktop.
  • 完成第 2 部分中的应用程序容器化工作.
  • 通过键入docker system info确保在 Docker 桌面上启用了 Swarm,并查找消息Swarm: active (您可能需要向上滚动一点).

    如果 Swarm 没有运行,只需在 shell 提示符下键入docker swarm init即可进行设置.

Introduction

既然我们已经演示了应用程序的各个组件作为独立容器运行并展示了如何使用 Kubernetes 进行部署,那么让我们看看如何安排它们由 Docker Swarm 管理. Swarm 提供了许多用于扩展、联网、保护和维护容器化应用程序的工具,超出了容器本身的能力.

In order to validate that our containerized application works well on Swarm, we’ll use Docker Desktop’s built in Swarm environment right on our development machine to deploy our application, before handing it off to run on a full Swarm cluster in production. The Swarm environment created by Docker Desktop is 功能齐全, meaning it has all the Swarm features your app will enjoy on a real cluster, accessible from the convenience of your development machine.

Describe apps using stack files

Swarm 永远不会像我们在本教程的上一步中那样创建单独的容器. 相反,所有 Swarm 工作负载都被安排为服务,它们是可扩展的容器组,具有由 Swarm 自动维护的附加网络功能. 此外,所有 Swarm 对象都可以并且应该在称为堆栈文件的清单中进行描述. 这些 YAML 文件描述了 Swarm 应用程序的所有组件和配置,可用于在任何 Swarm 环境中轻松创建和销毁应用程序.

让我们编写一个简单的堆栈文件来运行和管理我们的公告板. 将以下内容放在名为bb-stack.yaml的文件中:

version: '3.7'

services:
  bb-app:
    image: bulletinboard:1.0
    ports:
      - "8000:8080"

在这个 Swarm YAML 文件中,我们只有一个对象: service ,描述一组可伸缩的相同容器. 在这种情况下,您将只获得一个容器(默认),该容器将基于您在快速入门教程的第 2 部分中创建的bulletinboard:1.0图像. 此外,我们要求 Swarm 将所有到达我们开发机器上端口 8000 的流量转发到我们公告板容器内的端口 8080.

Kubernetes 服务和 Swarm 服务非常不同! 尽管名称相似,但这两个协调器在"服务"一词中的含义却截然不同. 在 Swarm 中,服务提供调度网络设施,创建容器并提供将流量路由到它们的工具. 在 Kubernetes 中,调度和网络是分开处理的:部署(或其他控制器)将容器的调度处理为 pod,而服务仅负责向这些 pod 添加网络功能.

Deploy and check your application

  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                 bulletinboard:1.0   *:8000->8080/tcp
    

    这表明您作为服务的一部分请求的 1/1 容器已启动并正在运行. 此外,我们看到您的开发机器上的端口 8000 正在转发到公告板容器中的端口 8080.

  3. 打开浏览器并在localhost:8000访问您的公告板; 您应该会看到您的公告板,就像我们在快速入门教程的第 2 部分中将其作为独立容器运行时一样.

  4. 满意后,关闭您的应用程序:

    $ docker stack rm demo
    

Conclusion

至此,我们已经成功使用 Docker Desktop 将我们的应用程序部署到了我们开发机器上功能齐全的 Swarm 环境中. 我们还没有对 Swarm 做太多工作,但大门现在已经打开:您可以开始在您的应用程序中添加其他组件,并在您自己的机器上利用 Swarm 的所有功能和强大功能.

除了部署到 Swarm 之外,我们还将我们的应用程序描述为一个堆栈文件. 这个简单的文本文件包含了我们在运行状态下创建应用程序所需的一切; 我们可以将其检查到版本控制中并与我们的同事共享,从而使我们能够轻松地将我们的应用程序分发到其他集群(例如我们的开发环境之后可能出现的测试和生产集群).

Swarm and CLI references

本文中使用的所有新 Swarm 对象和 CLI 命令的更多文档可在此处获得:

swarm, 群服务, stacks

by  icopy.site