-1

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

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

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

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

4

1 回答 1

0

Docker 为您的容器提供了一个进程命名空间,您的进程可能会派生出子进程或运行多线程。您可以轻松地在 docker 容器内运行多进程应用程序,事实上,这就是您在运行 bash shell 然后在 bash 内运行任何其他 cli 命令时所做的事情。

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

此外,如果任何进程在退出时没有被其父进程收割并且它们进入僵尸状态,它们将不会被主机操作系统的 init 自动清理(僵尸进程不会传播到命名空间之外。为了解决这个问题,有一些项目就像 tini 一样,它充当容器内的 init 替代品。

于 2016-08-20T00:52:52.077 回答