Docker本地缓存与远程缓存(--cache-from)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker本地缓存与远程缓存(--cache-from)相关的知识,希望对你有一定的参考价值。

我试图优化我的docker注册表的存储,但使用远程缓存时遇到了问题。

我的docker文件看起来如下。

FROM java:11-debian

LABEL maintainer="Me"
ENV LANG en_US.utf8

RUN addgroup --system --gid 51170 myusername

...

如果我在本地构建多次,缓存就会被使用。

对于Jenkins管道,我总是用最新的标记我的最后一次构建,并在当前消息的构建前拉出之前的最新版本。

docker pull artifactory/image:latest
docker build -t artifactory/image --cache-from artifactory/image:latest .
docker tag artifactory/image artifactory/image:latest
docker push artifactory/image:latest

日志输出如下。

 ...
   ---> f6363f58bc32
 Step 2/18 : LABEL maintainer="Me"
   ---> Using cache
   ---> 54efd5e63c04
 Step 3/18 : ENV LANG en_US.utf8
   ---> Using cache
   ---> 6865c5539193
 Step 4/18 : RUN addgroup --system --gid 51170 myusername
  Removing intermediate container f8d05d2e5f16
   ---> af5202782abc
...

为什么在远程缓存的情况下,RUN没有被缓存?本地缓存和使用--cache-from有什么不同?

答案

https:/docs.docker.comenginereferencecommandlinebuild#specifying-external-cache-sources。

要使用图像作为缓存源,缓存元数据需要在创建时写入图像。这可以通过设置 --build-arg BUILDKIT_INLINE_CACHE=1 构建映像时使用。之后,构建的镜像可以作为后续构建的缓存源。

此外,要使用Docker BuildKit,你必须拥有 DOCKER_BUILDKIT=1 在您的环境中。最简单的方法是

DOCKER_BUILDKIT=1 docker build ...

以上是关于Docker本地缓存与远程缓存(--cache-from)的主要内容,如果未能解决你的问题,请参考以下文章

缓存方案:本地guavaCache, 远程redis?

带有docker的Gitlab runner不会在本地缓存rails gem

markdown 缓存,本地,远程;

Unity 远程加载资源以及本地缓存相关

使用 EmberData 在本地存储中缓存远程数据

Day412.分布式锁redisson与缓存 -谷粒商城