Docker部署nodejs应用并使用PM2作为守护进程
环境:centos7.6 Docker version 18.06.0-ce
1 2 | mkdir /data cd /data |
拉取最新keymetrics/pm2:latest-alpine镜像
1 | docker pull keymetrics /pm2 :latest-alpine |
从github上拉取代码,先要安装git
1 | git clone https: //github .com /keymetrics/pm2-docker-alpine |
1 | cd /data/pm2-docker-alpine/example-app |
编写Dockerfile,WORKDIR:指定容器的工作目录 COPY:将当前目录下的文件拷贝至容器的/home/Service目录下 EXPOSE 3000:暴露容器内的端口为3000
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@localhost example-app] # more Dockerfile FROM keymetrics /pm2 :latest-alpine # Bundle APP files RUN mkdir -p /home/Service WORKDIR /home/Service COPY . /home/Service #COPY src src/ #COPY package.json . #COPY pm2.json . # Install app dependencies ENV NPM_CONFIG_LOGLEVEL warn RUN npm install --production # Show current folder structure in logs #RUN ls -al -R EXPOSE 3000 CMD [ "pm2-docker" , "start" , "pm2.json" ] |
构建容器镜像,注意最后有个点
1 | docker build -t test_nodepm2 . |
查看构建成功的镜像
1 | docker images |
启动容器,并将容器的/home/Service映射到宿主机的/data/pm2-docker-alpine/example-app目录下,便于代码发布,修改
1 | docker run --name mynodepm2 -d - v /data/pm2-docker-alpine/example-app : /home/Service -p 3000:3000 test_nodepm2 |
查询容器的运行状态
在浏览器上访问容器所在的服务地址+暴露出来的端口,测试服务是否能正常
查询项目运行状态
1 | docker exec -it 8205f9c2f6cd pm2 list |
1 | docker exec -it 8205f9c2f6cd pm2 monit |
1 2 3 4 | docker exec -it <container- id > pm2 monit 监控每个进程的CPU /使用情况 docker exec -it <container- id > pm2 list 列出托管流程 docker exec -it <container- id > pm2 show 获取有关流程的更多信息 docker exec -it <container- id > pm2 reload all 0秒停机时间重新加载所有应用程序 |
更多命令可以执行--help 查看
1 | docker exec -it 8205f9c2f6cd pm2 --help |
如何进入容器内
1 | docker exec -it 8205f9c2f6cd /bin/sh |
修改容器内的时区为中国上海,用于和当前时间同步,注意以下所有操作在容器内进行操作
1 2 3 | apk add -U tzdata cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime apk del tzdata |
参考:https://hub.docker.com/r/keymetrics/pm2 如有疑问可以留言
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】