Dockerdynamic负载均衡与Nginx

我正在做一个专注于Docker的实习,我必须负载平衡一个有客户端,服务器和数据库的应用程序。 我使用Nginx作为负载平衡器,我的目标是根据CPU使用情况dynamic地扩展服务器容器的数量。 例如,如果CPU使用率超过60%,我想在不重新启动Nginx的情况下添加一个新的容器来分配CPU使用率。 我必须修改nginx.conf文件来添加一个新的容器,但我必须重新启动Nginx容器才能应用更改,这是非常缓慢的。

所以我的问题是:是否有一个(免费)的方式dynamic地做到这一点?

告诉我,如果你想要更多的信息,请原谅我可怜的英语。 谢谢。

编辑:我做了@Konstantin阿齐佐夫告诉我:

docker cp ./new.conf $(docker ps -f "name=dockerizedrubis_nginx" -q ):/etc/nginx/nginx.conf docker exec $(docker ps -f "name=dockerizedrubis_nginx" -q) bash -c 'kill -HUP $(cat /run/nginx.pid)' docker exec $(docker ps -f "name=dockerizedrubis_nginx" -q) bash -c '/etc/init.d/nginx reload' 

configuration文件粘贴在支持Nginx的容器中,我发送HUP信号重新configurationNginx进程,然后重新加载以应用我的更改。 没有任何错误,即时重新载入工作正常,但我的新节点不被Nginx考虑,请求仍然只是针对创build的第一个节点…

编辑2:我find了问题的根源。 这似乎是为了在'docker-compose scale'之后更新一个容器的/ etc / hosts,这个容器需要被停止,删除和重新启动。 就我而言,我真的不想停止支持Nginx的容器。

问题:任何人都有一个想法,如何在重新规模后更新容器的/ etc / hosts而不必重新启动容器(在脏脚本旁边)?

谢谢。

我使用了Json Wilder的nginx-proxy镜像一段时间来在容器之间进行负载均衡,并且它适用于多个可伸缩服务。 它监视docker守护进程,如果发生事件,则重buildnginxconfiguration文件,在扩展时添加新的容器实例,或者在扩展时删除它。

由于Docker 1.10(如果这是正确的版本,不能确定),Docker守护进程中会embedded一个内部的DNS,所以从那以后我就使用循环function了。 现在我使用官方的nginx映像来代理将请求传递给我定义为别名到networking选项的域。 我不知道我是否因为英文不好而清楚,但我相信我的Github例子可能会有所帮助。

不幸的是,没有简单的(免费的)方法来改变configuration而无需重新启动,只有这样才能实现零宕机时间的正常重启,当你重新启动Nginx时,它会产生新configuration,等待启动,然后杀死旧的实例与以前的configuration。

见官方指南 。