我应该在(Docker)容器中永远使用/ pm2吗?

时间:2015-03-09 13:00:16

标签: node.js docker coreos microservices

我正在重构几个node.js服务。所有这些都曾经在虚拟服务器上以forever开头,如果进程崩溃,他们只是重新启动。

现在,转向容器化和无状态应用程序结构,我认为该进程应该退出,并且容器应该在失败时重新启动。

这是对的吗?有利有弊吗?

3 个答案:

答案 0 :(得分:46)

我的看法是不要使用容器内进程管理程序(永远,pm2),而是通过--restart=always(或该选项的其他一种)使用docker restart策略。这更符合整体码头工作者的理念,并且应该与集装箱内过程监控非常相似,因为码头集装箱容易开始快速运行。

如果你想探讨关于这个话题的另一个立场,我已经看到了phusion baseimage-docker README中最强烈的支持容器内流程监督的倡导者。

答案 1 :(得分:18)

尽管使用--restart=always作为故障保护是个好主意,但容器重启速度相对较慢(简单的Hello World节点服务器描述here为5秒以上),因此您可以尽量减少使用forever等内容进行应用停机。

在容器内重新启动进程的缺点是崩溃恢复现在可以以两种方式发生,这可能会对您的监控等产生影响。

答案 2 :(得分:0)

如果您在具有多个CPU的服务器上运行,则节点需要集群设置。

有了PM2,您无需编写任何额外的代码就可以实现这一点。 http://pm2.keymetrics.io/docs/usage/cluster-mode/

除非您使用的是一堆具有单个CPU实例的服务器,否则我会说在生产环境中使用PM2。

pm2也将比docker更快重启