menu

与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

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

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

使用

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

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

设置您的生态系统文件

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

pm2 init

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

module.exports = {
  apps : [{
    name: "app",
    script: "./app.js",
    env: {
      NODE_ENV: "development",
    },
    env_production: {
      NODE_ENV: "production",
    }
  }]
}

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

设置一个Docker文件

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

FROM keymetrics/pm2:latest-alpine

# Bundle APP files
COPY src src/
COPY package.json .
COPY ecosystem.config.js .

# Install app dependencies
ENV NPM_CONFIG_LOGLEVEL warn
RUN npm install --production

# Expose the listening port of your app
EXPOSE 8000

# Show current folder structure in logs
RUN ls -al -R

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

建立您的镜像

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

docker build -t your-app-name .

运行您的镜像

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

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

pm2命令

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

# Monitoring CPU/Usage of each process
docker exec -it <container-id> pm2 monit
# Listing managed processes
docker exec -it <container-id> pm2 list
# Get more information about a process
docker exec -it <container-id> pm2 show
# 0sec downtime reload all applications
docker exec -it <container-id> pm2 reload all

暴露安全端点

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

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

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

您准备好了

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

下一步

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

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

疑问?

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