【问题标题】:Docker container and PM2 runnng in ec2 instance在 ec2 实例中运行的 Docker 容器和 PM2
【发布时间】:2022-01-02 09:28:52
【问题描述】:

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

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

【问题讨论】:

    标签: node.js docker amazon-ec2 pm2


    【解决方案1】:

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

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

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

    根据经验,我可以说,如果我从同一个容器运行 cronjob,我将始终使用 NodeJS 核心 worker_threadscluster 模块来实现此目的。因为您不希望 cronjob 影响主线程的行为。我在下面的repo 中有一个在多个线程上运行 2 个应用程序的示例。

    2。我应该放弃 docker 并在我的 ec2 的本机 linux 中运行应用程序

    Docker 和 PM2 是两个完全不同的东西。 Docker 基本上是为了容器化你的整个 Node 应用程序,所以它更容易发布。 PM2 是 node 的流程管理器,确保您的应用程序已启动,并带有一些不错的指标,并在 PM2 指标上记录 UI。您绝对可以同时使用这 2 个,因为 PM2 还可以确保您的应用在崩溃后启动。

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

    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"]
    

    【讨论】:

    • 非常感谢您的回复。 cron 作业仅在午夜运行,因此它不应影响主应用程序。我将研究 pm2-runtime 因为我真的想实现 docker。我想我接下来要做的就是了解如何在构建管道中使用 Jenkins 来完成所有这些工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 2020-10-04
    • 2019-04-14
    • 2017-08-16
    • 2022-01-08
    • 2023-02-26
    相关资源
    最近更新 更多