MyEMS开源能源管理系统核心代码解读015

38 阅读3分钟

MyEMS开源能源管理系统适用于建筑、工厂、商场、医院、园区的电、水、气等能源数据采集、分析、报表,还有光伏、储能、充电桩、微电网、设备控制、故障诊断、工单管理、人工智能优化等可选功能。资深专业团队开发维护,保障长期支持。用开源助力企业集团、产业园区、能源运营商低碳发展!

本期解读: myems-web Dockerfile:myems/myems-web/Dockerfile

源代码链接:gitee.com/myems/myems…

FROM node:latest as build-stage
WORKDIR /opt
COPY . .

# use this for node v17.x.x or above, note that the default command maybe slow at sometime
RUN 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 config
RUN rm /etc/nginx/conf.d/default.conf && rm /etc/nginx/nginx.conf

# create new root folder
RUN mkdir -p /var/www/myems-web

COPY nginx.conf /etc/nginx/
COPY --from=build-stage /opt/build/ /var/www/myems-web
EXPOSE 80
CMD ["nginx", "-c", "/etc/nginx/nginx.conf", "-g", "daemon off;"]

这个Dockerfile文件是用于构建一个基于Node.js和Nginx的web应用的Docker镜像。它使用了多阶段构建(multi-stage build)来优化最终镜像的大小和结构。

概要

1.构建阶段: 使用Node.js环境来构建前端应用。 2.生产阶段: 使用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;"]

  • 设置容器启动时执行的命令,这里启动Nginx服务器。

补充说明

  • 这个Dockerfile使用了多阶段构建,可以减少最终镜像的大小,因为它只包含了运行应用所必需的文件。
  • 在构建阶段,使用了Node.js环境来处理前端资源的构建。
  • 在生产阶段,使用了Nginx作为静态文件服务器,更适合在生产环境中提供服务。