如何优化使用Docker部署的项目的部署速度

原本的dockerfile

# Workdir is unprivileged user home
WORKDIR /usr/src/app

# 安装依赖
COPY package.json /usr/src/app
COPY package-lock.json /usr/src/app
COPY .npmrc /usr/src/app
RUN npm install

# 复制代码
COPY . /usr/src/app/

RUN npm run postinstall

# build正式环境
RUN npm run build

在观察Jenkins的输出结果中可发现

Step 9/20 : COPY package.json /usr/src/app
 ---> Using cache
 ---> 1f7a1ece8500
Step 10/20 : COPY .npmrc /usr/src/app
 ---> Using cache
 ---> 01a69dbb8206
Step 11/20 : COPY ./packages /usr/src/app/
 ---> Using cache
 ---> 3809c07708fd
Step 12/20 : RUN npm install
 ---> Using cache
 ---> 6b7c4a5f8026
Step 13/20 : COPY . /usr/src/app/
 ---> 002ac521832a
Step 14/20 : RUN npm install
info sentry-cli Downloading from https://npm.taobao.org/mirrors/sentry-cli/1.71.0/sentry-cli-Linux-x86_64
fetching sentry-cli-Linux-x86_64 1%
fetching sentry-cli-Linux-x86_64 2%
fetching sentry-cli-Linux-x86_64 3%

原先的 Dockerfile 通过 COPY . /usr/src/app/ 引起了文件变动,导致缓存失效,重新下载了 sentry 的二进制文件。经过修正后的 Dockerfile 将 postinstall 提前到 COPY . /usr/src/app/ 前面,避免因文件变动而引起缓存失效。另外,将 npm install 和 npm run build 分别独立开来,不再混在一起。
以下是更改后的dockerfile

WORKDIR /usr/src/app
# 安装依赖
COPY package.json /usr/src/app
COPY package-lock.json /usr/src/app
COPY .npmrc /usr/src/app
RUN npm install
RUN npm run postinstall

COPY . /usr/src/app/
RUN npm run build

同时,在查看 Webpack 的 SMP Plugins 插件打印的 Webpack 不同步骤耗时时发现,imagemin-webpack 这个图片压缩插件需要花费2分钟20秒,增加了构建时间。优化方法是将项目中的所有图片在本地压缩完,再上传到 Git。这样修改后可以减少近1分钟的构建时间,提高构建效率。

修改前
imagemin-webpack took 2 mins, 20.46 secs
  module count = 35

修改后
imagemin-webpack took 1 min, 18.77 secs
  module count = 35
posted @ 2023-05-24 16:50  被咯苏州  阅读(122)  评论(0编辑  收藏  举报