部署到群
预计阅读时间: 5分钟先决条件
- 在第2部分中完成对应用程序的容器化。
-
通过键入
docker system info
并查找消息Swarm: active
(您可能需要向上滚动一点),确保在Docker桌面上启用了Swarm: active
。如果Swarm没有运行,只需在shell提示符下键入
docker swarm init
进行设置。
介绍
现在,我们已经证明了应用程序的各个组件可以作为独立容器运行,并展示了如何使用Kubernetes进行部署,让我们看看如何安排它们由Docker Swarm管理。Swarm提供了许多工具,可用于扩展,联网,保护和维护您的容器化应用程序,这超出了容器本身的能力。
为了验证我们的容器化应用程序能否在Swarm上正常工作,我们将在开发机器上使用Docker Desktop内置的Swarm环境来部署我们的应用程序,然后再将其移交给生产环境中的完整Swarm集群。Docker Desktop创建的Swarm环境具有完整的功能 ,这意味着它具有您的应用程序将在真正的群集上享受的所有Swarm功能,可通过开发机器的便利性进行访问。
使用堆栈文件描述应用程序
Swarm绝不会像本教程的上一步那样创建单个容器。相反,所有Swarm工作负载都计划为services ,它们是可伸缩的容器组,具有由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。
部署和检查您的应用程序
-
将您的应用程序部署到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 bulletinboard:1.0 *:8000->8080/tcp
这表示您在服务中要求的1/1个容器已启动并正在运行。此外,我们看到开发计算机上的端口8000已转发到公告板容器中的端口8080。
-
打开浏览器,访问位于
localhost:8000
公告板;您应该看到您的公告板,就像在本教程的步骤2中将其作为独立容器运行时一样。 -
一旦满意,请拆除您的应用程序:
docker stack rm demo
结论
至此,我们已经成功地使用Docker Desktop将我们的应用程序部署到开发机器上的功能齐全的Swarm环境中。我们还没有对Swarm做很多事情,但是现在这扇门已经打开:您可以在自己的机器上开始向应用程序添加其他组件,并利用Swarm的所有功能和强大功能。
除了部署到Swarm之外,我们还将应用程序描述为堆栈文件。这个简单的文本文件包含在运行状态下创建应用程序所需的一切;我们可以将其检入版本控制并与同事共享,从而使我们可以轻松地将应用程序分发到其他集群(例如可能在开发环境之后的测试和生产集群)。
Swarm和CLI参考
此处提供了本文中使用的所有新Swarm对象和CLI命令的更多文档:
群 , 群服务 , 堆栈