前言
自己在服务器上整了gitlab的cicd,但是build时的基础镜像是node16的官方镜像,导致每次都需要先下载依赖包,浪费很多时间,便想着先在镜像(容器)中缓存依赖包,然后重新生成新的镜像
解决方案
简单而言,就是将package.json拷贝到node16官方镜像生成的容器中,然后pnpm install 会自动到生成缓存(默认在~/.cache/pnpm 目录下),如下图
步骤
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