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

Pat*_*ick 40 node.js docker coreos microservices

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

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

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

Pet*_*ons 46

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

如果你想探索关于这个话题的另一个立场,那么我所见过的最强大的支持容器内过程监督的倡导者就是在虚拟的baseimage-docker自述文件中.

  • 呃,只有当你部署到一个正在运行的容器而不是用新的应用程序代码重建一个新的容器时,这会破坏docker旨在提供的大部分好处.在负载平衡器级别执行零停机.运行多个应用实例. (24认同)
  • 但是,您可以使用docker丢失零停机时间部署.使用裸机PM2,您可以进行滚动部署而无需负载平衡器. (2认同)

Aid*_*man 18

尽管使用--restart=always故障保护是个好主意,但容器重启速度相对较慢(此处描述的简单的Hello World节点服务器可以使用5秒以上),因此您可以使用类似的方式最小化应用程序停机时间forever.

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