容器环境加速devops流程的两大法宝
1 使用精简版基础镜像
2 使用多阶段构建即最终只发布构建文件
以vue项目为例 nodejs基础镜像加上npm依赖项轻轻松松就构建出来个以GB为单位的巨大镜像出来。
但是采用多阶段构建,并最终使用nginx:alpine精简镜像发布的话大小就可以减少到20m上下(harbor中只占10左右),一下子就清爽多了。
express koa eggjs等后端项目的Dockerfile模板
# 引入alpine精简版镜像(20是版本号,-后边是基础镜像名称,alpine使用一种精简版的Linux镜像)
# 使用精简镜像的好处 减少攻击面 减小最终镜像的体积 加快构建、镜像推拉和部署速度
FROM node:20-alpine
# 设置时区环境变量
ENV TIME_ZONE=Asia/Shanghai
# alpine镜像下要安装tzdata软件 不然时区设置无效
# 国内节点安装软件速度巨慢甚至安装不上 推荐使用阿里云镜像源
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add --no-cache tzdata \
&& echo "${TIME_ZONE}" > /etc/timezone \
&& ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime
# 指定工作目录
WORKDIR /app
# 先只拷贝package.json是为了缓存依赖文件
COPY package.json /app
# 执行npm i之前不要拷贝任何代码文件,不然每次代码变更都会导致缓存失效重新安装依赖项
RUN npm i --registry=https://registry.npmmirror.com
# 安装完依赖项以后再拷贝代码文件
COPY . /app
# 导出运行端口
EXPOSE 3000
# 执行启动命名
CMD npm run start
vue react angular的前端项目的Dockerfile模板
# 为了提高自动化程度以及精简镜像进行多阶段处理
# ----------------- stage1 构建打包阶段 -----------------
FROM node:20-alpine as buildEnv
ARG envTag=dev
ENV mode=${envTag}
ENV VUE_APP_ENV=${envTag}
RUN mkdir -p /app
WORKDIR /app
COPY package.json /app/
RUN npm i --registry=https://registry.npmmirror.com --sass_binary_site=https://npmmirror.com/mirrors/node-sass
COPY . /app/
RUN npm run build:h5 -- --mode=${envTag}
# ----------------- stage2 运行阶段 -----------------
FROM nginx:alpine
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY --from=buildEnv /app/dist/build/h5 /usr/share/nginx/html/
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx","-g","daemon off;"]
发表回复