缓存
我们在用kaniko打包的时候,引用的外部镜像每次都会去拉取,导致打包非常缓慢。
kaniko提供了将外部镜像提前缓存到本地,kaniko pod可直接使用的方式。
缓存基础镜像(Caching Base Images)
kaniko 可以将镜像缓存在本地目录中,该目录可以挂载到 kaniko pod 中。所以,必须首先缓存镜像(只读的)。gcr.io/kaniko-project/warmer
提供了打缓存镜像的方法:
docker run -v $(pwd):/workspace gcr.io/kaniko-project/warmer:latest --cache-dir=/workspace/cache --image=<image to cache> --image=<another image to cache>
docker run -v $(pwd):/workspace gcr.io/kaniko-project/warmer:latest --cache-dir=/workspace/cache --dockerfile=<path to dockerfile>
docker run -v $(pwd):/workspace gcr.io/kaniko-project/warmer:latest --cache-dir=/workspace/cache --dockerfile=<path to dockerfile> --build-arg version=1.19
--image
可以指定任意数量的镜像。--dockerfile
可以指定用于缓存的dockerfile的路径。
这些命令将组合起来,把这些镜像按摘要缓存到一个名为cache的本地目录中。缓存填充完成后,就可以使用与上述相同的--cache=true
标志选择缓存。本地缓存的位置通过 --cache-dir
标志提供,默认为 /cache
。
实战:
openjdk缓存
docker run -v $(pwd):/workspace kubebiz/kaniko-project:warmer-v1.19.3 --cache-dir=/workspace/cache --image=openjdk:8u342-
实战2:
从自定义harbor仓库拉取自定义镜像,进行缓存:
docker tag openjdk:8u342-jre your.k8s.cluster.api:8070/sys/openjdk:8u342-jre
docker push your.k8s.cluster.api:8070/sys/openjdk:8u342-jre
docker run --add-host=your.k8s.cluster.api:192.168.0.152 -v $(pwd):/workspace kubebiz/kaniko-project:warmer-v1.19.3 --cache-dir=workspace --image=your.k8s.cluster.api:8070/sys/openjdk:8u342-jre --insecure-pull
REF
https://github.com/GoogleContainerTools/kaniko?tab=readme-ov-file#flag---cache