PM2 与 Docker 的配合使用教程

阅读时长 4 分钟读完

前言

在现代 web 开发中,一个应用很可能在多个环境中运行。如测试服务器、预发布、生产等。而 Docker 却可以帮助我们统一环境、打包应用、管理容器,从而简化部署流程。而作为 Node.js 应用的进程管理工具,PM2 又可以帮助我们自动重启、负载均衡、日志管理等操作。因此,本文将介绍如何将 PM2 与 Docker 配合,以更高效地管理应用。

需要用到的工具

  1. Docker:容器化应用
  2. PM2:进程管理工具

配合使用

1. 编写 Dockerfile

首先,需要编写 Dockerfile。下面是一个简单的示例:

-- -------------------- ---- -------
- ------
---- --------------

- ----
------- ----

- ----
---- - ----

- ----
--- --- -------

- ------
------ ----

- ----
--- --------------- -------- ----------------

上述 Dockerfile 以 Node.js 14 为基础镜像,通过 WORKDIR 指定了工作目录,之后复制代码到工作目录中。运行 RUN npm install 安装依赖。最后使用 pm2-runtime 启动应用。

需要注意的是,这里使用了 PM2 的内置进程管理器 pm2-runtime。与 pm2 start 命令不同,pm2-runtime 可以在后台管理进程。详细使用方法可以查阅 PM2 官方文档

除此之外,还可以指定一些环境变量,例如:

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 镜像:

上述命令将当前目录下的所有文件打包成一个名为 my-app 的 Docker 镜像。注意最后的点,表示使用当前目录下的 Dockerfile 文件构建镜像。

4. 启动容器

在执行以下命令启动容器:

上述命令将 my-app 代码打包成的镜像跑在 Docker 容器中,并映射容器内部的 3000 端口到宿主机的 3000 端口。

至此,你已经成功地将 PM2 与 Docker 配合,实现了自动重启、负载均衡等功能。如果需要监控应用健康状况,可以使用 PM2 的 PM2 Plus 扩展。

总结

PM2 是一个好用的 Node.js 进程管理工具,而 Docker 可以将应用统一管理、简化部署流程。二者结合使用可以使得应用更加高效、稳定。本文介绍了 PM2 和 Docker 的配合使用方法,希望对读者有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6492138c48841e9894ff78d4

纠错
反馈