Docker 在 ec2 实例中运行的容器和 PM2

Docker container and PM2 runnng in ec2 instance

我有一个 ec2 实例,它正在 运行 连接节点应用程序。我正在考虑使用 docker 进行容器实现。 pm2 是 运行ning 两个应用程序,一个是实际的节点应用程序(express 和 pug),另一个是使用议程的 cronjob。将我的应用程序放在一个容器中是个好主意吗?

我还不熟悉这方面的优缺点,我读到 docker 已经是流程管理员了。一旦我实施它,pm2 将如何适应所有这些。或者我应该放弃 docker 和 运行 我的 ec2 本机 linux 中的应用程序。

你有几个问题,我试着在下面回答:

1。将我的应用程序放在一个容器中是个好主意吗?

视情况而定,在很多情况下您希望 运行 同一个容器执行多项操作。但这实际上取决于作业的 CPU/RAM/Memory 用法。它多久 运行?

无论如何,根据经验我可以说,如果我 运行 来自同一个容器的 cronjob,我总是会使用 NodeJS 核心 worker_threadscluster 模块来使用工作者方法.因为您不希望 cronjob 影响主线程的行为。我在下面的 repo.

中有一个 运行 在多线程上运行 2 个应用程序的示例

2。我应该放弃 docker 和 运行 我的 ec2

本机 linux 中的应用程序吗?

Docker 和 PM2 是两个完全不同的东西。 Docker 基本上是将整个 Node 应用程序容器化,因此更容易发布。 PM2 是节点的进程管理器,可确保您的应用程序已启动并带有一些不错的指标和有关 PM2 指标的日志 UI。您绝对可以将两者一起使用,因为 PM2 还可以确保您的应用程序在崩溃后能够启动。

但是,如果您使用 pm2,则在使用 docker 时必须使用 pm2-runtime。示例 Docker文件:

FROM node:16.9.0

WORKDIR /home/usr/app

COPY . .

RUN npm ci && npm run build

# default command is starting the server
CMD ["npx", "pm2-runtime", "npm", "--", "start"]