使用Nginx和Docker Swarm加载平衡和扩展Node.js容器
在我之前的博客中,我们了解了如何在不同主机端口上的docker容器中部署Node.js应用程序,并使用Nginx对其进行负载均衡。
这是一个很好的方法,可以用来理解基础知识。但是,在生产环境中,在不同的端口上单独部署一个容器也是不可行的,也可以在我们的Nginx配置文件中写入每个ip:端口,而且,当容器由于某种原因出现故障时,管理和重写配置文件。因此,当容器数量增加时,它变得难以管理和令人沮丧。
解决此问题的一种方法是使用Container Orchestration。我们将使用docker本身提供的编排器称为docker swarm为我们解决问题,你可以在这里阅读swarm,services,stacks的一般介绍
先决条件:
Docker Basics
概述:
在这篇博客中,我们将对Node.js应用程序进行docker化,然后在swarm群中心化部署15个容器,看看我们如何使用Nginx在单个IP后面对它们进行负载均衡,然后最后通过对它们进行上下扩展来实现容器可视化以更好的方式。
好的,让我们开始吧
我们的Node应用程序的app.js看起来像这样。
它只是在端口5000上使用os.hostname()进行响应,以便我们可以区分不同的运行容器。
我们需要将此应用程序停靠,因此请将此Dockerfile复制到下方,并将终端cmd / shell打开到同一文件夹。
在这里,您需要运行docker build -t username / appname。其中username是您的docker-hub用户名,然后使用docker image push username / appname将其推送到docker hub。
我们正在将它推向docker hub,以便我们进行一次性设置,并且可以使用docker-compose.yml文件在任何服务器上随时启用我们的容器,此外,我们不需要构建映像我们所需要的每台服务器都是我们云服务器上的docker-compose.yml文件。
所以对于我的情况,命令是:
- docker build -t aagam29 / nodeapp_balancerdemo。
- docker image push aagam29 / nodeapp_balancerdemo
我们需要Nginx作为容器的负载均衡器,所以让我们设置它。移至新文件夹并复制这些文件。
根据您的服务器更改nginx.conf中的IP。
现在我们将进行类似的图像构建和推送,我们在上面做了
- docker image build -t aagam29 / nginx_balancerdemo
- docker image push aagam29 / nginx_balancerdemo
完成后,您应该能够在docker hub上看到图像
好的,下一个任务是在我们的部署服务器上创建一个swarm集群。
只需键入docker swarm init,即可创建一个swarm。我们将在一台服务器上看到部署,以防您希望使用多个只需添加一个管理器节点到swarm,并在构建nginx映像之前添加它的IP:Port并打开所需的容器端口以便它们进行通信。
复制服务器上的以下docker-compose文件,根据您在构建映像时使用的用户名/ appname更改映像名称。
如果您熟悉docker-compose文件,您可以轻松了解这里发生的事情。
对于那些没有的人,我们正在创建两项服务:
- 第一个名为nodeapp,将生成我们的图像aagam29 / nodeapp_balancerdemo的15个容器,映射将从主机端口5000到容器端口5000.如果容器发生故障,将有3次连续重启尝试,更新后将关闭→容器
3乘3,延迟10秒,容器将被添加到文件末尾创建的称为余额的网络中 - 第二个是命名代理,它将从我们的映像aagam29 / nginx_balancerdemo中旋转一个容器,该映像是从主机端口80映射到容器端口80的相同网络平衡,这取决于nodeapp,这意味着一旦nodeapp服务启动它就会启动节点应该是群中的管理器才能运行此服务
复制此文件后,我们需要使用docker stack deploy -b docker-compose.yml swarmnodeapp使用docker stack部署我们的服务堆栈
部署堆栈后,我们可以使用docker service ls和docker service ps servicename检查部署状态,我们也可以使用docker container ls查看正在运行的容器。
随后的截图清除了整个过程
恭喜?,我们差不多完成了如果一切顺利,您可以访问您的IP以查看容器ID并多次点击刷新以查看它们每次更改以交叉检查负载平衡是否非常顺利
现在有了扩展点,您可以使用swarm轻松扩展容器所有您需要运行的是docker service scale servicename = replicas例如docker service scale swarmnodeapp_nodeapp = 50
为了更好地可视化运行的contianers,我们可以使用docker visualizer。只需运行docker container run -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock -d dockersamples / visualizer
然后访问您的IP:8080以正确查看您的群中运行的容器。
做得好
我们刚刚为您的Node.js应用程序实现了一次性可扩展部署,还为其配置了负载平衡,并在不使用命令行的情况下对其进行可视化。
谢谢阅读如果你喜欢你所读的内容,请留下?然后关注。