部署到 Swarm
注意
Swarm 模式是用于管理 Docker 守护程序集群的高级功能。
如果您打算将 Swarm 用作生产运行时环境,请使用 Swarm 模式。
如果您不打算使用 Swarm 部署,请改用 Docker Compose。如果您正在为 Kubernetes 部署开发,请考虑使用 Docker Desktop 中的 集成 Kubernetes 功能。
先决条件
按照 获取 Docker 中的说明下载并安装 Docker Desktop。
完成 Docker 教程第 2 部分 中的应用程序容器化。
通过键入
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 应用,即在 教程第 2 部分 中创建的容器 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
,它描述了可扩展的相同容器组。在这种情况下,您将只获得一个容器(默认值),并且该容器将基于您在 教程第 2 部分 中创建的 getting-started
镜像。此外,您还要求 Swarm 将到达开发机器上 8000 端口的所有流量转发到 getting-started
容器内的 3000 端口。
Kubernetes 服务和 Swarm 服务大相径庭
尽管名称相似,但这两个编排器对术语“服务”的含义大相径庭。在 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 应用,与您在 教程第 2 部分 中将其作为独立容器运行时相同。满意后,拆除您的应用程序
$ docker stack rm demo
结论
至此,您已成功使用 Docker Desktop 将您的应用程序部署到开发机器上的功能齐全的 Swarm 环境。您现在可以向您的应用程序添加其他组件,并在您的机器上充分利用 Swarm 的所有功能和强大功能。
除了部署到 Swarm 之外,您还将应用程序描述为堆栈文件。这个简单的文本文件包含您在运行状态下创建应用程序所需的一切;您可以将其签入版本控制并与同事共享,让您可以将应用程序分发到其他集群(例如开发环境后的测试和生产集群)。
Swarm 和 CLI 参考
本文中使用的所有新 Swarm 对象和 CLI 命令的更多文档在此处提供