前言
在现代 web 开发中,一个应用很可能在多个环境中运行。如测试服务器、预发布、生产等。而 Docker 却可以帮助我们统一环境、打包应用、管理容器,从而简化部署流程。而作为 Node.js 应用的进程管理工具,PM2 又可以帮助我们自动重启、负载均衡、日志管理等操作。因此,本文将介绍如何将 PM2 与 Docker 配合,以更高效地管理应用。
需要用到的工具
- Docker:容器化应用
- PM2:进程管理工具
配合使用
1. 编写 Dockerfile
首先,需要编写 Dockerfile。下面是一个简单的示例:
-- -------------------- ---- ------- - ------ ---- -------------- - ---- ------- ---- - ---- ---- - ---- - ---- --- --- ------- - ------ ------ ---- - ---- --- --------------- -------- ----------------
上述 Dockerfile 以 Node.js 14 为基础镜像,通过 WORKDIR
指定了工作目录,之后复制代码到工作目录中。运行 RUN npm install
安装依赖。最后使用 pm2-runtime
启动应用。
需要注意的是,这里使用了 PM2 的内置进程管理器 pm2-runtime
。与 pm2 start
命令不同,pm2-runtime
可以在后台管理进程。详细使用方法可以查阅 PM2 官方文档。
除此之外,还可以指定一些环境变量,例如:
ENV NODE_ENV production
2. 编写 PM2 配置文件
在项目根目录下,新建一个 pm2.config.js 文件。这里是一个简单的示例:
-- -------------------- ---- ------- -------------- - - ----- -- ----- --------- ------- ------------ ---------- ------ ------------ ----- ------ ------ ------------------- ----- ---- - --------- -------------- -- --------------- - --------- ------------- -- --- --
上述配置使用了 PM2 的 JSON 配置文件格式。apps
是一个数组,可以配置多个应用的信息。其中关键字段解释如下:
name
:应用名称script
:应用入口文件instances
:实例数,默认 1。'max' 表示 cpu 核心数。autorestart
:应用崩溃后是否自动重启。watch
:是否监听文件变化重启。max_memory_restart
:应用内存限制,超出限制则重启应用。env
:开发环境变量。env_production
:生产环境变量。
更多 PM2 配置文件的说明可以查阅 PM2 官方文档。
3. 构建 Docker 镜像
在项目根目录下,执行以下命令构建 Docker 镜像:
docker build -t my-app .
上述命令将当前目录下的所有文件打包成一个名为 my-app 的 Docker 镜像。注意最后的点,表示使用当前目录下的 Dockerfile 文件构建镜像。
4. 启动容器
在执行以下命令启动容器:
docker run -p 3000:3000 my-app
上述命令将 my-app 代码打包成的镜像跑在 Docker 容器中,并映射容器内部的 3000 端口到宿主机的 3000 端口。
至此,你已经成功地将 PM2 与 Docker 配合,实现了自动重启、负载均衡等功能。如果需要监控应用健康状况,可以使用 PM2 的 PM2 Plus 扩展。
总结
PM2 是一个好用的 Node.js 进程管理工具,而 Docker 可以将应用统一管理、简化部署流程。二者结合使用可以使得应用更加高效、稳定。本文介绍了 PM2 和 Docker 的配合使用方法,希望对读者有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6492138c48841e9894ff78d4