集装箱模式的最佳实践

我使用https://hub.docker.com/r/tiangolo/uwsgi-nginx图像docker化Python webapp,该图像使用supervisor来控制uWSGI实例。

我的应用程序实际上需要一个额外的主pipe介导的过程来运行(LibreOffice无头,我通过appy模块生成文档),我想知道什么是适当的模式来实现它。

我看到的方式,我可以扩展上面的图像与额外的主pipeconfiguration我的需要(以及所有必要的操作系统级别的安装步骤),但这将是矛盾的一般原则运行最less量的独特在给定的容器中的进程。 但是,由于我的Python应用程序只能在本地与LibreOffice进行交stream,所以我不确定如何以更集装箱的方式实现它。 感谢您的任何帮助或build议。

每个容器一个进程的build议是合理的 – Docker只监视容器运行时启动的进程,所以如果你有多个进程,他们不会被Docker监视。 这也是一个更好的devise – 你有轻量级的,重点集中的单一职责的容器,你可以独立pipe理它们。

user2105103是正确的,你使用的图像已经失去了这个好处,因为它运行Python和Nginx,你可以扩展它与LibreOffice无头和包装你的整个应用程序,而无需更改代码。

如果您转向更“最佳实践”的方法,则可以在Dockernetworking中的三个容器上运行分布式应用程序:

  • nginx – web代理,这是应用程序的公共入口点。 Nginx可以做路由,caching,SSL终止,速率限制等。
  • app – 您的Python应用程序,只在Dockernetworking中可见。 接收来自nginx请求并使用libreoffice进行文件操作;
  • libreoffice – 在暴露API的情况下以无头模式运行,但只能在Dockernetworking中使用。

您需要对此进行代码更改,从而使PyOO等应用程序容器远程使用LibreOffice API。

您已经吹了“每个容器一个进程” – 只需添加另一个进程即可。 这不是一个硬性的规定,甚至是每个人都同意的规则。

延伸,或更好地创作自己的自定义容器。 这种方式你拥有它,你了解它,并为你的目的进行了优化。