第一:使用轻量化基础镜像
第二:使用多阶段构建
通过多阶段构建,我们可以在dockerfiel中使用多个基础镜像,并将其编译成为成品,打包后的文件从一个阶段到另一个阶段,这样我们就可以丢弃不需要的东西了
类似命令尽量写在同一行用 &&,因为每行命令都会封装一层,下一层的无法对上一层修改,会导致镜像变大
请记住来自第一阶段(1-4)行的镜像不会被删除,Docker将它保存在cache 中,如果我们在另一个构建镜像 过程中执行了相同的阶段,就可以使镜像构建的更快,所以需要手动删除第一个阶段的镜像
FROM node:10-alpine AS build
WORKDIR /app
COPY app /app
RUN npm install && npm run build
FROM nginx:stable-alpine
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx","-c","deamon off;"]