docker-deps 可以快速、完整地从任何 Node.js 或前端项目中提取出安装依赖所需求的文件,使得构建 Docker 镜像时 “安装依赖” 这一步能利用 Docker 的 “分层缓存” 机制,从而命中缓存快速完成。
docker-deps 的特色功能:
bun),不会遗漏任何配置文件;原理简介:
Node.js 项目通过 Dockerfile 构建 Docker 镜像时,安装依赖的步骤往往耗费较长时间;此时可利用 Docker 的 “分层缓存(Layer)” 机制,只要依赖不变,就能复用以前的构建 Layer 缓存,快速完成构建步骤。
而 Layer 缓存的命中与否取决于 Dockerfile 中的命令以及添加到构建中的文件内容是否有变更。 构建命令通常不会修改,但项目代码是几乎每次构建都会有变动的,这便会导致无法命中缓存。
因此,构建步骤需要进行调整:
原本无法命中缓存的步骤,经调整后,前两步均能命中缓存。
而 docker-deps 便是为了 ① 而设计,它可以快速、完整地提取依赖配置。
以命令行的方式理解这个过程: 调整前:
# ① 添加项目所有文件到镜像内
COPY . <镜像内的工作区>
# ② 安装依赖
RUN npm i
RUN npm run build调整后: 先通过 CI/CD 或是手动运行,启动此工具,以提取依赖配置:
npx -y docker-deps然后:
# ① 仅添加依赖配置
COPY .docker-deps <镜像内的工作区>
# ② 安装依赖
RUN npm i
# ③ 添加项目所有文件到镜像内
COPY . <镜像内的工作区>
RUN npm run build其中第 ① 步不包含项目代码,只包含几个依赖配置文件(例如 package.json、yarn.lock),这些文件不会经常改变,使得第 ① 步可以命中 Layer 缓存,从而使得第 ② 步同样也命中缓存,快速完成依赖安装。