我正在使用https://hub.docker.com/r/tiangolo/uwsgi-nginx镜像对接一个Python webapp,它使用supervisor来控制uWSGI实例。
我的应用程序实际上需要一个额外的主管协调的进程来运行(LibreOffice headless,我使用它通过appy模块生成文档),我想知道实现它的合适模式是什么。
在我看来,我可以根据需要使用额外的管理程序配置(以及所有必要的操作系统级安装步骤)来扩展上面的映像,但这将与在给定容器中运行最少不同进程的一般原则相矛盾。然而,由于我的Python应用程序被设计为仅在本地与LibreOffice对话,我不确定如何使用更容器化的方法来实现它。感谢您的帮助或建议。
发布于 2016-10-17 18:36:21
每个容器一个进程的建议是合理的- Docker只监控容器运行时启动的进程,所以如果你有多个进程,Docker不会监视它们。这也是一种更好的设计--您拥有轻量级的、专注于单一职责的容器,并且您可以独立管理它们。
user2105103是对的,你使用的图像已经失去了这种好处,因为它运行Python和Nginx,你可以用LibreOffice headless扩展它,并在不更改代码的情况下打包整个应用程序。
如果你转向一种更“最佳实践”的方法,你会有一个分布式的应用程序运行在Docker网络中的三个容器上:
nginx - web代理,这是应用程序的公共入口点。Nginx可以做路由,缓存,SSL终止,速率限制等。app -你的Python应用程序,只在Docker网络中可见。接收来自Docker的请求,并对Docker manipulation;libreoffice使用libreoffice -在无头模式下运行,但仅在Docker网络中可用。为此,您需要更改代码,引入诸如PyOO之类的代码,以便从应用程序容器远程使用LibreOffice应用程序接口。
发布于 2016-10-17 05:34:20
您已经破坏了“每个容器一个进程”--只需添加另一个进程即可。这不是一个严格的规则,甚至不是每个人都同意的规则。
向外扩展,或者更好地编写自己的自定义容器。这样你就拥有了它,你理解了它,它为你的目的进行了优化。
https://stackoverflow.com/questions/40075618
复制相似问题