MyEMS开源能源管理系统核心代码解读015
本期解读:
myems-web Dockerfile:myems/myems-web/Dockerfile
源代码链接:
https://gitee.com/myems/myems/blob/master/myems-web/Dockerfile?sessionid=261001321
FROM node:latest as build-stageWORKDIR /optCOPY . .
# use this for node v17.x.x or above, note that the default command maybe slow at sometimeRUN npm install --unsafe-perm=true --allow-root --legacy-peer-deps
# use this if above command is slow or unavialiable# RUN npm install --unsafe-perm=true --allow-root --legacy-peer-deps --registry https://registry.npm.taobao.org
# use this (without --legacy-peer-deps) for node v16.x.x# RUN npm install --unsafe-perm=true --allow-root
RUN npm run build
FROM nginx:latest as production-stage
RUN apt update && apt install -y nano telnet
# remove the default configRUN rm /etc/nginx/conf.d/default.conf && rm /etc/nginx/nginx.conf
# create new root folderRUN mkdir -p /var/www/myems-web
COPY nginx.conf /etc/nginx/COPY --from=build-stage /opt/build/ /var/www/myems-webEXPOSE 80CMD ["nginx", "-c", "/etc/nginx/nginx.conf", "-g", "daemon off;"]
这个Dockerfile文件是用于构建一个基于Node.js和Nginx的web应用的Docker镜像。它使用了多阶段构建(multi-stage build)来优化最终镜像的大小和结构。
概要
- 构建阶段:使用Node.js环境来构建前端应用。
- 生产阶段:使用Nginx作为静态文件服务器来部署构建好的前端应用。
详细解析
1. FROM node:latest as build-stage
- 这行代码指定了构建阶段的基础镜像为最新版本的Node.js。
2.WORKDIR /opt
- 设置工作目录为/opt。
3.COPY . .
- 将当前目录下的所有文件复制到工作目录中。
4.RUN npm install --unsafe-perm=true --allow-root --legacy-peer-deps
- 运行npm安装依赖。这个命令适用于Node.js v17.x.x或更高版本。--unsafe-perm=true和--allow-root参数用于解决权限问题,--legacy-peer-deps用于处理依赖关系。
5.RUN npm run build
- 执行构建脚本,通常是编译、打包前端资源。
6.FROM nginx:latest as production-stage
- 开始生产阶段的构建,使用最新版本的Nginx作为基础镜像。
7.RUN apt update && apt install -y nano telnet
- 更新软件包列表并安装nano和telnet工具。
8.RUN rm /etc/nginx/conf.d/default.conf && rm /etc/nginx/nginx.conf
- 删除Nginx的默认配置文件。
9.RUN mkdir -p /var/www/myems-web
- 创建新的根目录用于存放前端应用。
10.COPY nginx.conf /etc/nginx/
- 将自定义的Nginx配置文件复制到Nginx的配置目录。
11.COPY --from=build-stage /opt/build/ /var/www/myems-web
- 从构建阶段复制构建好的前端应用到Nginx的根目录。
12.EXPOSE 80 - 暴露80端口,Nginx默认监听此端口。
13.CMD ["nginx", "-c", "/etc/nginx/nginx.conf", "-g", "daemon off;"]