与Docker一起使用PM2
准备好包含PM2
的Node.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构建时会自动触发这些镜像的构建。 每次
push
到Docker PM2’s GitHub repo主分支时,会自动触发这些镜像的构建。 每次push
到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
生成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
。你也可以在PM2
的GitHub仓库提交问题或评论。