与Docker一起使用PM2

准备好包含PM2Node.js Docker镜像。

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构建时会自动触发这些镜像的构建。 每次pushDocker PM2’s GitHub repo主分支时,会自动触发这些镜像的构建。 每次pushPM2’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

生成ecosystem.config.js模板:

pm2 init

修改ecosystem.config.js

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

生态系统文件教程

配置Dockerfile

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

建立镜像

在你的项目下运行命令:

docker build -t your-app-name .

启动容器

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

-p 80:8000映射主机端口80到应用端口8000

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

暴露安全endpoint

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

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

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

准备好了

就是这样!容器做好部署准备。

下一步

完成生态系统文件配置

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

问题

我们很乐于帮你解决你可能遇到的问题。搜索或查看FAQ。你也可以在PM2GitHub仓库提交问题或评论。