在 docker 下移动 prefork 应用程序

Moving prefork application under docker

我有一个 prefork 模型服务器。这意味着应用程序将启动,在端口上绑定一个套接字,它们分叉 X 次,因此每 children 共享同一个端口。

我现在想在 docker 下移植此应用程序。 我的理解是一个 docker 实例应该 运行 只有我的服务器之一,以获得更好的可用性。因此,如果我想要 运行 5 个进程实例,我应该 运行 5 docker 个实例所有 运行ning 我的应用程序。 到目前为止我是正确的吗?

如果是,我的问题是,是否可以让我的所有 docker 个实例都 运行 连接在同一个端口下?

我同意我可以使用反向代理,在其中为我的服务映射一系列端口,但我想尽可能避免这种情况。

Docker 为您的容器提供一个进程命名空间,您的进程可以在其中派生子进程或 运行 多线程。您可以在 docker 容器中轻松 运行 一个多进程应用程序,事实上,这就是您在 运行 一个 bash shell 然后运行 bash.

内的任何其他 cli 命令

唯一的要求是您使用 docker run 启动的进程在 linux 系统上扮演 init 的角色作为 pid 1。这意味着如果您的 pid 1退出,整个容器立即终止。所以你的主进程需要在前台保持 运行ning。

此外,如果任何进程在退出时未被其父进程回收并进入僵尸状态,它们将不会被主机 OS 的 init 自动清除(僵尸进程不会传播超出命名空间。为了解决这个问题,有像 tini 这样的项目在容器内充当 init 替代品。