在部署演示服务之前,我们应该创建一个新的网络,以便构成服务的所有容器都可以相互通信,而不用关心它们部署在哪个节点上:
第3章将更详细地探讨网络。现在只讨论在Swarm集群内有效部署服务所需的内容。
可以使用以下命令检查所有网络的状态:
network ls命令的输出如下所示:
正如你所看到的,我们有两个swarm范围内的网络。当我们设置集群时,默认会创建一个名为ingress的网络。第二个go-demo网络是使用network create命令创建的,我们会把构成go-demo服务的所有容器分配给该网络。
第3章将深入讨论Swarm网络。现在只需要知道属于同一网络的所有服务都可以自由通信就够了。
go-demo应用程序需要两个容器,数据将存储在MongoDB容器中,使用该DB的后端被定义为vfarcic/go-demo容器。
首先在集群中的某个地方部署mongo容器。通常,我们使用约束来指定容器的需求(例如,HD类型、内存和CPU的数量等)。现在我们将跳过它,并告诉Swarm将其部署到集群中的任何位置:
请注意,我们没有指定Mongo监听27017的端口。这意味着除了属于同一个go-demo网络的其他服务以外,任何人都无法访问该数据库。
正如你所看到的,使用服务创建的方式类似于你已经习惯的Docker run命令。
我们可以列出所有正在运行的服务:
你会看到REPLICAS列的值为0或1,这取决于service create命令和service ls命令之间经过时间的长短。创建服务后这个值应为0/1,这意味着有0个副本正在运行,而期望是有1个。一旦mongo镜像被拉取到且容器正在运行,值应该就变为1/1。
service ls命令的最终输出应如下所示(为简洁起见,删除了ID):
如果需要更多关于go-demo-db服务的信息,则可以运行service inspect命令:
现在数据库正在运行,我们可以部署go-demo容器:
这个命令没有什么新鲜之处,该服务将被添加到go-demo网络,环境变量DB是go-demo服务的内部需求,它告诉代码数据库的地址。
此时,我们有两个容器(mongo和go-demo)在集群内部运行,并通过go-demo网络相互通信。请注意,它们都不能从这个网络之外访问。此时,你的用户无法访问服务API。我们很快会更详细地讨论这个问题。在此之前,我只给你一个提示:你需要一个能够使用新版Swarm网络的反向代理。
让我们再次运行service ls命令:(www.xing528.com)
在go-demo服务被拉到目标节点之后的结果应该如下(为简洁起见,删除了ID):
如你所见,这两种服务都以单个副本的形式运行,如图2-7所示。
图2-7 通过go-demo SDN通信的Docker Swarm集群容器
如果想扩展其中一个容器,会发生什么?如何扩展我们的服务?
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。