使用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

{
  "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`进入容器内部执行指令
posted @ 2022-06-16 17:58  小猪冒泡  阅读(611)  评论(0编辑  收藏  举报