与Docker一起使用PM2

生产就绪的Node.js Docker镜像,包括 PM2

pm2-runtime的目标是将您的应用包装到合适的Node.js生产环境中。 它解决了在容器内部运行Node.js应用时遇到的主要问题:

  • 高应用可靠性的第二个过程回退
  • 进程流控制
  • 自动监控应用以便使它始终保持健全和高性能
  • 自动源地图发掘与解析支持
    除此之外,使用PM2作为容器和应用之间的一个层,带来了PM2强大的功能,如生态系统文件,自定义日志系统和pm2的其他功能。

准备您的应用

可用标签

镜像名称 *操作系统 Docker文件
keymetrics/pm2:latest-alpine Alpine latest-alpine
keymetrics/pm2:8-alpine Alpine 8-alpine
keymetrics/pm2:6-alpine Alpine 6-alpine
keymetrics/pm2:4-alpine Alpine 4-alpine
镜像名称 操作系统 Docker文件
keymetrics/pm2:latest-stretch Debian Stretch latest-stretch
keymetrics/pm2:8-stretch Debian Stretch 8-stretch
keymetrics/pm2:6-stretch Debian Stretch 6-stretch
keymetrics/pm2:4-stretch Debian Stretch 4-stretch
*镜像名称 操作系统 Docker文件
keymetrics/pm2:latest-jessie Debian Jessie latest-jessie
keymetrics/pm2:8-jessie Debian Jessie 8-jessie
keymetrics/pm2:6-jessie Debian Jessie 6-jessie
keymetrics/pm2:4-jessie Debian Jessie 4-jessie
*镜像名称 操作系统 Docker文件
keymetrics/pm2:latest-slim Debian Jessie (minimal packages) latest-slim
keymetrics/pm2:8-slim Debian Jessie (minimal packages) 8-slim
keymetrics/pm2:6-slim Debian Jessie (minimal packages) 6-slim
keymetrics/pm2:4-slim Debian Jessie (minimal packages) 4-slim
镜像名称 操作系统 Docker文件
keymetrics/pm2:latest-wheezy Debian Wheezy latest-wheezy
keymetrics/pm2:8-wheezy Debian Wheezy 8-wheezy
keymetrics/pm2:6-wheezy Debian Wheezy 6-wheezy
keymetrics/pm2:4-wheezy Debian Wheezy 4-wheezy

您可以在这里找到更多关于镜像变体的信息。

每次构建这些图像的过程都会自动触发 NodeJS’s Docker images的构建。 每次 Docker PM2’s GitHub repo主分支被推送时,这些镜像的构建过程都会自动触发。 每次 PM2’s GitHub repo主分支被推送时,这些镜像的构建过程都会自动触发。

使用

我们假设您的项目有以下文件夹结构。

  1. `-- your-app-name/
  2. |-- src/
  3. `-- app.js
  4. |-- package.json
  5. |-- ecosystem.config.js (we will create this in the following steps)
  6. `-- Dockerfile (we will create this in the following steps)

设置您的生态系统文件

生成一个ecosystem.config.js模板:

  1. pm2 init

修改生态系统文件以符合您的需求:

  1. module.exports = {
  2. apps : [{
  3. name: "app",
  4. script: "./app.js",
  5. env: {
  6. NODE_ENV: "development",
  7. },
  8. env_production: {
  9. NODE_ENV: "production",
  10. }
  11. }]
  12. }

这里了解更多关于生态系统文件的教程。

设置一个Docker文件

使用以下内容创建一个名为Dockerfile的新文件

  1. FROM keymetrics/pm2:latest-alpine
  2. # Bundle APP files
  3. COPY src src/
  4. COPY package.json .
  5. COPY ecosystem.config.js .
  6. # Install app dependencies
  7. ENV NPM_CONFIG_LOGLEVEL warn
  8. RUN npm install --production
  9. # Expose the listening port of your app
  10. EXPOSE 8000
  11. # Show current folder structure in logs
  12. RUN ls -al -R
  13. CMD [ "pm2-runtime", "start", "ecosystem.config.js" ]

建立您的镜像

从您的Node.js应用项目文件夹启动这些命令:

  1. docker build -t your-app-name .

运行您的镜像

  1. docker run -p 80:8000 your-app-name

-p 80:8000将您应用的端口8000绑定到本地主机的端口80

pm2命令

pm2命令仍然可以在docker exec命令的容器中使用:

  1. # Monitoring CPU/Usage of each process
  2. docker exec -it <container-id> pm2 monit
  3. # Listing managed processes
  4. docker exec -it <container-id> pm2 list
  5. # Get more information about a process
  6. docker exec -it <container-id> pm2 show
  7. # 0sec downtime reload all applications
  8. docker exec -it <container-id> pm2 reload all

暴露安全端点

  1. CMD ["pm2-runtime", "ecosystem.config.js", "--web"]

—web [port]选项允许通过JSON API公开所有重要信号(docker实例+应用).

在shell中安装pm2之后,运行 pm2-runtime -h获取所有可用选项.

您准备好了

就是这样! 您的容器已准备好部署。

下一步

使用生态系统文件完成您的配置

使用 PM2 Plus在仪表板上监控您的应用

疑问?

我们一直乐于帮您解决可能遇到的问题。搜索我们的文档或查看常见问题的答案。您也可以在我们的社区论坛发布问题或评论。

原文: https://pm2.io/doc/zh/runtime/integration/docker/