在一个主机上管理Docker容器的构建和运行

时间:2018-08-20 19:46:57

标签: python docker

我有一台运行多个容器的服务器

  • Nginx
  • Portainer
  • 几个自定义HTTP服务器
  • RabbitMQ

我在家庭目录中有这样的文件夹结构

namespace angular

/docker/dockerfiles/nginx/Dockerfile /docker/dockerfiles/nginx/README /docker/dockerfiles/nginx/NOTES /docker/dockerfiles/portainer/Dockerfile ... /docker/dockerfiles/rabbitmq/Dockerfile /docker/volumes/nginx/sites/... /docker/volumes/nginx/logs/... /docker/volumes/portainer/ ... /docker/volumes/rabbitmq/ 包含docker容器使用的所有文件,它们已映射到容器中,这些容器未使用真正的Docker卷,我真的想避免使用它们。

我还有3个Python文件:

/docker/volumes/

containers_info.py containers_build.py containers_run.py 基本上是一本字典,其中包含有关容器的基本信息,例如容器的版本和构建日期(如果应该在构建过程中将其排除/包含在容器中,如果应将其包含/排除在其中)跑步通行证

containers_info.py导入containers_build.py并检查应构建哪些容器,从containers_info.py读取相应的Dockerfile,然后使用Docker Python API构建该容器,收集一些统计信息并创建摘要,通知失败等。

/docker/dockerfiles/.../Dockerfile还将导入containers_run.py并检查应运行哪些容器。它包含以下信息:要映射到哪些卷,要使用哪些端口,基本上所有要在YAML文件中描述容器的内容,以及对当前正在运行的容器的一些管理。

它包含多个片段,例如

containers_info.py

现在,我想摆脱这种自定义解决方案,使用开放源代码,这将使我可以将此方法扩展到多台计算机。目前,我可以在服务器之间复制〜/ docker /并执行修改后的脚本以获得所需的计算机,但是我认为Docker Swarm或Kubernetes旨在解决这些问题。至少在某种程度上,这就是我的印象。

我的Python解决方案是在我学习Docker时诞生的,通过Docker Python API对其进行自动化对我学习Dockerfile有很大帮助,因为我可以使整个过程自动化,而Dockerfile中的错误只会意味着一点点的浪费时间

这种Python脚本方法的另一个重要优点是,如果能够在同一台机器上自动创建数十个Web服务器实例(假设这样做很有意义),并且能够使Nginx完美适应这一变化,我就可以自动创建数十个Web服务器实例(动态添加/删除代理,重新加载配置。)

那么,我应该开始研究哪种技术,以便用它替换当前的系统?另外,我不打算运行很多机器,最初只运行两台(main + backup),但是在任何时间点,我都希望能够添加更多的计算机并在其中分配负载,并且只需更改即可配置文件中的一些设置。

当前解决这些问题的方法是什么?

1 个答案:

答案 0 :(得分:0)

在这种情况下可以使用许多工具。如果您仅打算使用一台计算机,则docker-compose可能是您正在寻找的解决方案。它使用yaml样式的makefile并支持相同的构建上下文(标准Docker和kubernetes也是如此)。轻松运行Pod或容器的多个实例确实很容易,仅使用--scale标志就可以消除很多麻烦

如果您打算在多台计算机上运行它,我想说kubernetes可能是最好的选择。确实为此做好了准备。诚然,我在Swarm方面没有很多经验,但这与我的理解类似。这样做的好处是kubernetes也可以为您处理负载平衡,而docker-compose则不能,并且您必须为此使用某种代理(例如Nginx)。这并不可怕,但如果您之前没有做过类似的事情,那也不是最简单的