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: 翻译不准,以后用熟了,再编辑更新!!>(_)<
本文暂时没有评论,来添加一个吧(●'◡'●)