部署到 Swarm
注意
Swarm 模式是用于管理 Docker daemon 集群的高级功能。
如果您打算将 Swarm 用作生产运行时环境,请使用 Swarm 模式。
如果您不打算使用 Swarm 进行部署,请改用 Docker Compose。如果您正在为 Kubernetes 部署进行开发,请考虑使用 Docker Desktop 中的集成 Kubernetes 功能。
先决条件
按照获取 Docker 中所述下载并安装 Docker Desktop。
按照Docker 动手实践第二部分 的说明进行应用程序容器化。
通过键入
docker system info
命令并查找消息Swarm: active
(您可能需要向上滚动一点),确保您的 Docker Desktop 上已启用 Swarm。如果 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 应用程序,即在本教程的第二部分 中创建的容器 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
,它描述了一组可伸缩的相同容器。在这种情况下,您将只获得一个容器(默认),该容器将基于您在本教程的第二部分 中创建的 getting-started
镜像。此外,您还要求 Swarm 将到达您开发机器端口 8000 的所有流量转发到 getting-started 容器内部的端口 3000。
Kubernetes Services 和 Swarm Services 非常不同
尽管名称相似,但这两种编排器对“服务”一词的含义非常不同。在 Swarm 中,服务提供调度和网络功能,创建容器并提供路由流量到这些容器的工具。在 Kubernetes 中,调度和网络是分开处理的,部署(或其他控制器)处理将容器调度为 Pod,而服务仅负责向这些 Pod 添加网络功能。
部署并检查您的应用程序
将您的应用程序部署到 Swarm
$ docker stack deploy -c bb-stack.yaml demo
如果一切顺利,Swarm 将报告已创建所有堆栈对象,且没有错误
Creating network demo_default Creating service demo_bb-app
请注意,除了您的服务外,Swarm 默认还会创建一个 Docker 网络,以隔离作为堆栈一部分部署的容器。
通过列出您的服务来确保一切正常运行
$ 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。
打开浏览器并访问
localhost:8000
上的 Todo 应用程序;您应该会看到您的 Todo 应用程序,这与您在本教程的第二部分 中将其作为独立容器运行时看到的一样。确认无误后,移除您的应用程序
$ docker stack rm demo
结论
至此,您已成功使用 Docker Desktop 将您的应用程序部署到开发机器上功能齐全的 Swarm 环境中。现在,您可以在您的机器上向应用程序添加其他组件,并充分利用 Swarm 的所有功能和强大之处。
除了部署到 Swarm 之外,您还使用堆栈文件描述了您的应用程序。这个简单的文本文件包含了在运行状态下创建应用程序所需的一切;您可以将其提交到版本控制系统并与同事共享,从而将您的应用程序分发到其他集群(例如很可能在您的开发环境之后的测试和生产集群)。
Swarm 和 CLI 参考
本文中使用的所有新的 Swarm 对象和 CLI 命令的更多文档可在此处找到