问题描述
想知道是否有一种方法可以直接使用WSGI绑定运行Python服务器,而不使用Apache或NGINX。他正在尝试采用每个容器一个进程的理念,这将自然地将Apache/NGINX从容器中移除,只运行一个Python进程。他想知道是否有一种方法可以直接使用WSGI绑定运行Python服务器,而不使用Apache或NGINX。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
这个问题实际上有些不合理 – WSGI是一个Web服务器(如Apache)用来调用应用程序或脚本(如Python)的机制。如果没有Web服务器,那么首先使用WSGI的是什么呢?
也许你的问题实际上是,如何将现有的WSGI应用程序转换为独立运行的应用程序?Flask是一个可以作为WSGI或使用其自己的内部Web服务器运行的框架。
但是,退一步来说,我仍然认为这是一个错误的问题。如果在你的用例中没有意义,就没有必要盲目地应用“每个容器一个进程”的理念 – 这实际上只是某个随机人的观点。想一想。一个只包含一个进程的容器只是…一个进程。我们已经有了这些。容器最适合将逻辑上属于一起的东西捆绑在一起,并将它们作为一个单一的“东西”进行管理。容器内部的内容对于管理它们的人或任何其他人来说应该是完全不透明的。开发人员永远不会为了遵循“每个可执行文件一个共享对象”的理念而跳过障碍,因为这也没有意义!
如果你的应用程序已经很好地与Apache/Nginx配合使用,那么就按照这种方式进行容器化,它会很好地工作。
方案2
将Apache或NGINX放入容器中不仅是多余的,而且会使镜像的大小增加一倍,并且使我们的Dockerfile难以维护。这个答案很糟糕。
另一种方法是将Apache或NGINX放入容器中,但这样做不仅是多余的,而且会使镜像的大小增加一倍,并且使Dockerfile难以维护。因此,如果你的应用程序已经很好地与Apache或NGINX配合使用,那么最好按照这种方式进行容器化。