使用docker编译前后端项目
前端项目编译build后,把生成的文件放在后端的public中,然后后端使用dockerfile进行编译
后端nestjs项目:
#第一个阶段:拉取node镜像来打包React项目,as build是给该阶段起名字 FROM node:14 as build #设置docker命令的运行目录,工作空间 WORKDIR /app # 复制src等目录文件到工作空间中 必入 COPY src src/ 表示复制当前src文件夹中的内容到 工作空间(无则创建文件夹) COPY public /app/public COPY src /app/src COPY package.json ./ COPY tsconfig.json ./ COPY nest-cli.json ./ COPY tsconfig.build.json ./ RUN npm set registry https://registry.npm.taobao.org RUN npm install RUN npm run build # 第二个阶段:创建并运行Nginx服务器,并且把打包好的文件复制到服务器文件夹中 # 暴露端口 EXPOSE 4000 CMD ["node","dist/main.js"]
如果是纯前端项目:
#第一个阶段:拉取node镜像来打包React项目,as build是给该阶段起名字 FROM node:14 as build #设置docker命令的运行目录,工作空间 WORKDIR /app # 复制src等目录文件到工作空间中 必入 COPY src src/ 表示复制当前src文件夹中的内容到 工作空间(无则创建文件夹) COPY dist ./ # 第二个阶段:创建并运行Nginx服务器,并且把打包好的文件复制到服务器文件夹中 FROM nginx:alpine # 复制build阶段中 app/build打包文件内容到 nginx文件夹下 COPY --from=build /app/ /usr/share/nginx/html # 暴露端口 EXPOSE 80 CMD ["nginx","-g","daemon off;"]
使用pm2启动,参考文章:
https://segmentfault.com/q/1010000007258157
https://pm2.keymetrics.io/docs/usage/docker-pm2-nodejs/
#第一个阶段:拉取node镜像来打包React项目,as build是给该阶段起名字 FROM node:14 as build #设置docker命令的运行目录,工作空间 WORKDIR /app # 复制src等目录文件到工作空间中 必入 COPY src src/ 表示复制当前src文件夹中的内容到 工作空间(无则创建文件夹) COPY public /app/public COPY src /app/src COPY package.json ./ COPY tsconfig.json ./ COPY nest-cli.json ./ COPY tsconfig.build.json ./ COPY start.json ./ # RUN npm set registry http://registry.m.jd.com RUN npm set registry https://registry.npm.taobao.org RUN npm install RUN npm run build RUN npm install -g pm2 node-gyp # 第二个阶段:创建并运行Nginx服务器,并且把打包好的文件复制到服务器文件夹中 # 暴露端口 EXPOSE 4000 # CMD ["node","dist/main.js"] CMD ["pm2-runtime","start.json"]
对应的start.json
1 2 3 4 5 6 7 8 9 10 | { "apps" : [ { "name" : "esc-web" , "max_memory_restart" : "500M" , "script" : "/app/dist/main.js" , "instances" : 1 } ] } |
docker build -t react-web:1.0 .
docker run -d -p 4000:4000 react-web:1.0
`docker stop $(docker ps -aq)`停止所有容器
`docker rm $(docker ps -aq)` 删除所有容器
`docker images`可以查看当前的镜像
`docker rmi $(docker images -q)`删除全部 image
`docker run -it react-web:1.0 /bin/bash`进入容器内部执行指令
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通