我有一个prefork模型服务器。这意味着应用程序将启动,绑定端口上的套接字,它们分叉X次,以便每个子节点共享同一个端口。
我现在想在docker下移植这个应用程序。 我的理解是一个docker实例应该只运行我的一个服务器,以获得更好的可用性。因此,如果我想运行我的进程的5个实例,我应该运行5个docker实例,所有运行一次我的应用程序。 到目前为止我是否正确?
如果是,我的问题是,是否可以让所有的docker实例都在同一个端口下运行?
我同意我可以使用反向代理来为我的服务映射一系列端口,但我想尽可能避免这种情况。
答案 0 :(得分:0)
Docker为您的容器提供进程命名空间,您的进程可以在其中分叉子进程或运行多线程。您可以在docker容器内轻松运行多进程应用程序,事实上,只要您运行bash shell,然后在bash中运行任何其他cli命令,您就可以执行此操作。
唯一的要求是你使用docker run
启动的进程在linux系统上扮演init
角色为pid 1.这意味着如果你的pid 1退出,整个容器立即终止。因此,您的主要流程需要继续在前台运行。
此外,如果他们的父母在退出时没有获得任何进程并且他们进入僵尸状态,则他们将不会被主机操作系统的初始化自动清除(僵尸进程不会传播到超出为了解决这个问题,像tini这样的项目充当容器内的init替代品。