【npm包缓存】在docker镜像中用pnpm缓存依赖包

1,465 阅读1分钟

前言

自己在服务器上整了gitlab的cicd,但是build时的基础镜像是node16的官方镜像,导致每次都需要先下载依赖包,浪费很多时间,便想着先在镜像(容器)中缓存依赖包,然后重新生成新的镜像

解决方案

简单而言,就是将package.json拷贝到node16官方镜像生成的容器中,然后pnpm install 会自动到生成缓存(默认在~/.cache/pnpm 目录下),如下图

微信图片_20230412102318.png

步骤

1. 搭建gitlab环境并了解cicd,以及了解.gitlab-ci.yml文件的作用

2. 构建对应镜像

# 拉取node基础镜像
docker pull node:16.20-alpine
# 创建并进入容器
docker run -it node:16.20-alpine /bin/sh
# 拷贝package.json(pnpm的话可能还需要考虑pnpm-workspace.yaml及其子项目)到容器
#我用xshell7学生版远程的服务器
#上传package.json 会到当前目录(这个只是上传到服务器了,还没到容器)(如果是个文件夹先用tar压缩)
rz 
# 从服务器上传到容器内部 xxx 为容器名或者id
docker cp /tmp/package.json xxx:/tmp/package.json
#全局安装pnpm
npm i -g pnpm
# 安装依赖,生成缓存
pnpm install
# 生成新的镜像 m 提交信息;a 作者;e218edb10161:容器id;my-base-image:镜像名称
docker commit -m="has update" -a="xxx" e218edb10161 my-base-image

3. 修改cici用的基础镜像

微信截图_20230412112036.png