专业的编程技术博客社区

网站首页 > 博客文章 正文

pm2-docker 使用(docker —rm)

baijin 2024-08-26 10:13:23 博客文章 6 ℃ 0 评论

node.js pm2-docker 结合docker

pm2-docker库

此库目的是满足app运行在合适的node.js生产环境中,主要解决如下问题:

  • 正确的PID 1 信号处理和转发

  • 应用平滑的启动和关闭

  • 无缝应用集群提升性能和可靠性 此外,在生产环境中作为容器(docker)和应用之间的层,会提供PM2本身的特性功能(应用程序声明文件、定制日志系统、源码映射支持)来管理应用。 <!--more-->

用法:

Dockerfile中配置pm2-docker

Dockerfile文件开头配置安装pm2

RUN npm install pm2 -g

使用

CMD ["pm2-docker","app.js"]

替换

CMD ["node","app.js"]

注意: app.js 要用换成实际应用的启动文件

创建配置文件

除了直接用PM2启动应用源程序之外,还可以声明一个配置文件作为启动文件(yml格式)。

apps: - script : 'app.js' name : 'APP' exec_mode: 'cluster' instances: 4 - script : 'worker.js'

可用配置参数参见 配置之后,启动应用就可以使用

CMD ["pm2-docker", "process.yml", "--only", "APP"]

替换掉

CMD ["pm2-docker", "process.yml"]

日志格式化

如果想改变日志输出的格式,pm2-docker提供如下可选参数:

  • -json:json格式输出

  • -format:=样式

  • -raw:原样式

CMD ["pm2-docker", "--json", "process.yml"]

平滑关闭的实现

当容器接收到关闭信号,pm2会转发此信号给应用,等到当前的查询全部结束,进程全部停止后,断开所有数据库连接,实现平滑关闭。 应用中捕获关闭信号很简单,只需要在node.js应用中添加一个listener,就可以在关闭之前执行任何必要的操作。

process.on('SIGINT', function() { db.stop(function(err) { process.exit(err ? 1 : 0); });});

默认情况下,pm2会在等待1600ms之后发送SIGKILL信号,当然在应用中可以通过设定kill_timeout来延迟此等待时间,以保证关闭之前完成所有必要的处理。

开发环境

通常开发人员在容器中开发应用程序时,需要保证开发、测试、生产是统一的环境,这个使用就可以使用pm2-dev来替换pm2-docker,这样watch(监控)和restart(重启)等功能变为可用,

This is quite interesting in a development container when the host files are exposed to the container as a VOLUME 暂时对docker的一些概念不了解,没明白说的什么意思。

暴露健康节点

$ pm2-docker process.json --web

参数 --web[port] 允许通过JSON API 暴露(docker 实例和应用)的全部关键标识。

官方docker镜像


官方提供了开发环境中利用pm2-docker的镜像,host文件在容器中未做VOLUME暴露出来,此镜像是基于Alpine Linux的,很遗憾没直接提供CentOS的。 官方镜像地址

pm2-docker 命令

pm2-docker -h

参考: PM2-docker官方

PS: 翻译不准,以后用熟了,再编辑更新!!>(_)<

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表