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

4

我正在尝试优化我的Docker仓库中的存储,并在使用远程缓存时遇到问题。

我的Docker文件如下:

FROM java:11-debian

LABEL maintainer="Me"
ENV LANG en_US.utf8

RUN addgroup --system --gid 51170 myusername

...

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

对于Jenkins流水线,我总是使用latest标记我的上一次构建,并在当前消息的构建之前拉取先前的latest:

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的区别是什么?

1个回答

4

来自https://docs.docker.com/engine/reference/commandline/build/#specifying-external-cache-sources

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

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

DOCKER_BUILDKIT=1 docker build ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接