与Docker一起使用PM2

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

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

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

准备您的应用

可用标签

镜像名称*操作系统Docker文件
keymetrics/pm2:latest-alpineAlpinelatest-alpine
keymetrics/pm2:8-alpineAlpine8-alpine
keymetrics/pm2:6-alpineAlpine6-alpine
keymetrics/pm2:4-alpineAlpine4-alpine
镜像名称操作系统Docker文件
keymetrics/pm2:latest-stretchDebian Stretchlatest-stretch
keymetrics/pm2:8-stretchDebian Stretch8-stretch
keymetrics/pm2:6-stretchDebian Stretch6-stretch
keymetrics/pm2:4-stretchDebian Stretch4-stretch
*镜像名称操作系统Docker文件
keymetrics/pm2:latest-jessieDebian Jessielatest-jessie
keymetrics/pm2:8-jessieDebian Jessie8-jessie
keymetrics/pm2:6-jessieDebian Jessie6-jessie
keymetrics/pm2:4-jessieDebian Jessie4-jessie
*镜像名称操作系统Docker文件
keymetrics/pm2:latest-slimDebian Jessie (minimal packages)latest-slim
keymetrics/pm2:8-slimDebian Jessie (minimal packages)8-slim
keymetrics/pm2:6-slimDebian Jessie (minimal packages)6-slim
keymetrics/pm2:4-slimDebian Jessie (minimal packages)4-slim
镜像名称操作系统Docker文件
keymetrics/pm2:latest-wheezyDebian Wheezylatest-wheezy
keymetrics/pm2:8-wheezyDebian Wheezy8-wheezy
keymetrics/pm2:6-wheezyDebian Wheezy6-wheezy
keymetrics/pm2:4-wheezyDebian Wheezy4-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 thisin 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. COPYpackage.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. EXPOSE8000
  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 -p80: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/