我试图从部署一个在桌面用户上运行的应用程序的角度来考虑Docker。我的应用程序是一个简单的flask web应用程序和mongo数据库。通常,我会在VM中安装,并将主机端口转发到来宾web应用程序。我想尝试一下Docker,但我不确定我应该如何使用多个程序。文档说只能有入口点,所以我怎么才能有Mongo和我的flask应用程序呢?或者它们需要在不同的容器中,在这种情况下,它们如何相互通信,这如何使分发应用程序变得容易?
发布于 2019-06-19 16:22:54
虽然不建议您使用wait
在前台运行2个进程。只需使用以下内容创建一个bash脚本。例如start.sh
# runs 2 commands simultaneously:
mongod & # your first application
P1=$!
python script.py & # your second application
P2=$!
wait $P1 $P2
在您的Dockerfile中,以
CMD bash start.sh
如果您想同时运行多个进程,我建议您设置一个本地Kubernetes集群。您可以通过提供一个简单的Kubernetes清单来“分发”应用程序。
发布于 2013-11-13 19:08:22
它们可以在不同的容器中,实际上,如果应用程序还打算在更大的环境中运行,它们可能会在更大的环境中运行。
一个多容器系统需要更多的编排才能产生所有需要的依赖,尽管在Docker中,有一个新的工具内置在v0.6.5+中-- Linking。然而,对于多机解决方案,它仍然需要从Docker环境之外进行安排。
对于两个不同的容器,这两个部分仍然通过TCP/IP进行通信,但除非端口被特别锁定(不推荐,因为您将无法运行多个副本),否则您必须传递数据库暴露给应用程序的新端口,以便它可以与Mongo通信。这也是链接可以帮助解决的问题。
对于更简单、更小的安装,其中所有依赖项都放在同一个容器中,也可以让数据库和Python运行时都由最初作为入口点调用的程序启动。这可以像shell脚本一样简单,也可以像其他一些进程控制器一样-- Supervisord非常流行,在公共number文件中有许多示例。
发布于 2013-12-15 07:45:23
我同意其他答案,即使用两个容器是更可取的,但如果你想在一个容器中绑定多个服务,你可以使用像supervisord这样的东西。
例如,在Hipache中,包含的Dockerfile运行supervisord,而文件supervisord.conf指定同时运行hipache和redis-server。
https://stackoverflow.com/questions/19948149
复制相似问题