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_threads
或 cluster
模块来使用工作者方法.因为您不希望 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"]
我有一个 ec2 实例,它正在 运行 连接节点应用程序。我正在考虑使用 docker 进行容器实现。 pm2 是 运行ning 两个应用程序,一个是实际的节点应用程序(express 和 pug),另一个是使用议程的 cronjob。将我的应用程序放在一个容器中是个好主意吗?
我还不熟悉这方面的优缺点,我读到 docker 已经是流程管理员了。一旦我实施它,pm2 将如何适应所有这些。或者我应该放弃 docker 和 运行 我的 ec2 本机 linux 中的应用程序。
你有几个问题,我试着在下面回答:
1。将我的应用程序放在一个容器中是个好主意吗?
视情况而定,在很多情况下您希望 运行 同一个容器执行多项操作。但这实际上取决于作业的 CPU/RAM/Memory 用法。它多久 运行?
无论如何,根据经验我可以说,如果我 运行 来自同一个容器的 cronjob,我总是会使用 NodeJS 核心 worker_threads
或 cluster
模块来使用工作者方法.因为您不希望 cronjob 影响主线程的行为。我在下面的 repo.
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"]