构建一个 预装 pm2 的 node 项目 docker 底包
Dockerfile: 创建 dockerfile 文件, 命名为 dockerfile-yourProject-node.8.12.0-pm2
# MAGE: yourGroup/yourProject-node.8.12.0-pm2 # VERSION: 1.0.0 # AUTHOR: ecalf
# 基于网上公开的 docker 镜像构建,根据你的需要到 hub.docker.com 上找对应的镜像 FROM mhart/alpine-node:8 MAINTAINER ecalf <ecalf@xxx.com> #backup Dockerfile COPY dockerfile-yourProject-node.8.12.0-pm2 ~/Dockerfile #whereis node RUN ln -s /usr/bin/node /usr/local/bin/node RUN ln -s /usr/bin/node /usr/sbin/node RUN ln -s /usr/bin/node /usr/lib/node # Setting time zone RUN apk update && apk add ca-certificates && \ apk add tzdata && \ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo "Asia/Shanghai" > /etc/timezone #some module installed via cnpm of taobao RUN echo ';fsevents_binary_host_mirror=https://npm.taobao.org/mirrors/fsevents' >> ~/.npmrc RUN echo ';sass_binary_site=https://npm.taobao.org/mirrors/node-sass' >> ~/.npmrc RUN echo ';phantomjs_cdnurl=http://npm.taobao.org/mirrors/phantomjs' >> ~/.npmrc RUN echo ';electron_mirror=https://npm.taobao.org/mirrors/electron' >> ~/.npmrc RUN npm config set registry http://192.168.1.53:4873
#npm install RUN npm install -g pm2 EXPOSE 80 CMD ["node" ,"-v"]
创建文件夹, 把 dockerfile-yourProject-node.8.12.0-pm2 放进文件夹内,在命令行进入 该文件夹,执行下面命令构建底包,不要 在包含很多额外文件的文件夹内打包,否则准备docker上下文环境会花掉很长时间。
docker build -t hub.docker.xxx.com/yourGroup/yourProject-node.8.12.0-pm2:1.0.0 -f dockerfile-yourProject-node.8.12.0-pm2 .
构建项目的 Dockerfile 文件, 一个例子,具体根据自己项目具体情况来编写
# MAGE: yourGroup/yourProject # VERSION: 5.8.0 # AUTHOR: ecalf FROM hub.docker.xxx.com/yourGroup/yourProject-node.8.12.0-pm2:1.0.0 MAINTAINER ecalf <ecalf@xxx.com> # This section for common define ENV WORK_DIR /home/project/www.xxx.com ENV LOG_DIR /data/log ENV CONFIG_DIR /home/project/node/www.xxx.com/confLocal # This section for import code & config RUN mkdir -p $WORK_DIR RUN mkdir -p $LOG_DIR RUN mkdir -p $CONFIG_DIR WORKDIR $WORK_DIR COPY tar/xxx.com.tar.bz2 $WORK_DIR RUN tar -xjf xxx.com.tar.bz2 RUN rm xxx.com.tar.bz2COPY conf/process.json $WORK_DIR EXPOSE 4305 CMD ["pm2-docker", "start", "/home/project/www.xxx.com/process.json"]
项目镜像打包命令, 从命令传入新镜像的 tag,脚本 命名为 buildDocker, 则执行 buildDocker 1.0.0
#!/bin/sh tag=$1 if [ 'n'$1 = 'n' ]; then echo 'please input tag as argument' else sudo docker build -t hub.docker.xxx.com/yourGroup/yourProject:${tag} . fi
项目镜像的启动,从命令行传入要启动的镜像 tag,脚本 命名为 runDocker, 则执行 runDocker 1.0.0, 例子中设置了 环境配置文件夹、日志文件夹 的 挂载
#!/bin/sh tag=$1 sudo docker run --name yourProject -p 14305:4305 -v /home/ecalf/work/docker/yourProject/config:/home/project/www.xxx.com/confLocal -v /home/ecalf/work/docker/yourProject/logs:/home/project/www.xxx.com/logs -v /home/ecalf/work/docker/yourProject/log:/data/log -d hub.docker.xxx.com/yourGroup/yourProject:${tag}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库