基于Docker的项目构建速度优化策略(Npm构建版)

基于Docker的项目构建速度优化策略(Npm构建版)

原理介绍

项目目的

由于每次构建项目时npm都需要从远程仓库拉取npm依赖,项目构建的其他过程耗时在几十秒左右,但是依赖拉取过程耗时通常在几十秒到几分钟不等,所以对于npm依赖拉取的优化成为项目构建时间优化的重中之重。(以上均为中小型微服务项目测试数据)

本文通过docker镜像和npm缓存技术来解决以上问题。我们先来了解一下npm缓存原理。

NPM缓存原理

在这里插入图片描述

优化原理

有了npm缓存技术,我们只需要构建一个带有缓存的docker镜像文件,即可极大的减少项目构建时间。

操作理论流程如下

  1. 准备所有项目的所有依赖文件放进同一个package.json中
  2. 准备Dockerfile文件内容如下
From 原始镜像

WORKDIR /usr/src/app

COPY ./package.json ./

RUN npm install
#删除构建后的文件,只保留缓存即可,这里需要原始镜像的work
RUN rm -rf *
  1. 构建镜像
docker build -t base_image .
  1. 修改其他项目的Dockerfile中的源镜像为本镜像
#只需替换这一行即可
From base_image

构建流程(需要基础docker知识)

制作基础系统镜像

1. 准备工作

准备一个空目录里面放入如下文件,一个要缓存的package.json文件,一个Dockerfile文件。

Dockerfile文件内容如下

FROM xxx原始镜像

WORKDIR /usr/src/app

COPY ./package.json ./

RUN npm install

RUN rm -rf *
2. 制作基础系统镜像
docker build -f ./Dockerfile -t base_image .
3. 修改其他项目dockerfile文件进行测试
#只需替换相应Dockerfile文件的这一行即可
FROM base_image
4.上传基础系统镜像到镜像仓库
#标记镜像
docker <tag> <TagName>:<Version> <PersonalServerIP>:<Port(default 5000)>/<ImageName>:<Version>

#上传标记的镜像
docker push <PersonalServerIP>:<Port(default 5000)>/<ImageName>:<Version>

注意:仓库地址没有加协议部分,docker 默认的安全策略需要仓库是支持 https 的,如果服务器只能使用 http 传输,那么直接上传会失败,需要在 docker 客户端的配置文件中进行声明。

5. 修改其他项目dockerfile文件
#只需替换相应Dockerfile文件的这一行即可
FROM base_image

可能存在的问题

构建速度明显变慢,缓存是否会过期?

目前并无资料证明服务器检查缓存过期采用何种技术,ETag是否是hash。

通常,ETag 值是内容的哈希、上次修改时间戳的哈希或只是一个修订版号。例如,Wiki 引擎可以使用文档文章内容的十六进制哈希。"675af34563dc-tr34"``ETag

如果日后发现存在缓存过期现象(构建明显变慢)可以在所有项目的npm install命令中添加 --prefer-offline 参数来强制优先使用缓存(版本不同的包依然会走网络)。

用户可以指定缓存使用的策略

–prefer-offline: 将使npm跳过任何条件请求(304检查)直接使用缓存数据,只有在缓存无法匹配到的时候,才去访问网络。这样我们将依赖包添加到项目的过程就会快很多。

例如,npm install express --prefer-offline将现在缓存中匹配express,只有在本地缓存没有匹配到的情况下,才去联网下载。

–prefer-online: 与它将强制npm重新验证缓存的数据(使用304检查),并使用重新验证的新鲜数据刷新缓存。

–offline 将强制npm使用缓存或退出。如果尝试安装的任何内容尚未在缓存中,则它将出现代码错误。
————————————————
版权声明:本文为CSDN博主「照物华」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/daihaoxin/article/details/105749014

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值