【问题标题】:What's the difference between pm2 and pm2-runtime?pm2 和 pm2-runtime 有什么区别?
【发布时间】:2019-05-26 12:42:45
【问题描述】:
我一直在将一些在同一台机器上执行的项目转移到每个单独的 docker 上。我尝试在其中一个 docker 项目上使用 pm2 以确保如果出现问题(这是一个易变项目)服务将重新启动,并且一些示例要求 Dockerfile 使用 pm2-runtime 而不是 pm2 .我一直在寻找这两者的区别,但我找不到具体的东西,有人可以帮忙吗?
【问题讨论】:
标签:
docker
docker-compose
dockerfile
pm2
【解决方案1】:
pm2 和 pm2-runtime 的主要区别是
- pm2-runtime 专为 Docker 容器设计,将应用程序保持在前台,从而保持容器运行,
- pm2 专为在后台发送或运行应用程序的正常使用而设计。
简单来说,容器的生命周期就是CMD或entrypoint的生命周期。
例如
Dockerfile
FROM node:alpine
RUN npm install pm2 -g
COPY . /app
WORKDIR /app
CMD [ "pm2", "start","/app/server.js"]
在这种情况下,容器一运行进程就会死掉。
为了解决这个问题,你有 pm2-runtime
FROM node:alpine
RUN npm install pm2 -g
COPY . /app
WORKDIR /app
ENV NODE_ENV=development
CMD [ "pm2-runtime", "start","/app/bin/www"]
随着容器持续运行并分配 tty 会话。
来自文档
pm2-runtime 的目标是将您的应用程序包装成适当的
Node.js 生产环境。它解决了运行时的主要问题
容器内的 Node.js 应用程序,例如:
高应用程序可靠性流程的第二个流程回退
控制自动应用程序监控以使其始终保持健全和
高性能自动源地图发现和解析支持
此外,使用 PM2 作为容器和容器之间的层
应用程序带来了PM2强大的功能,如应用程序声明
文件、可定制的日志系统和其他强大的功能来管理您的
生产环境中的 Node.js 应用。
docker-pm2-nodejs