gpt4 book ai didi

docker - 使用 Docker Buildkit 构建镜像时 --cache-from 参数的顺序是否重要?

转载 作者:行者123 更新时间:2023-12-04 13:34:48 28 4
gpt4 key购买 nike

假设我正在使用 Docker Buildkit 构建一个镜像。我的图像来自多级 Dockerfile,如下所示:

FROM node:12 AS some-expensive-base-image
...

FROM some-expensive-base-image AS my-app
...
我现在正在尝试构建两个图像。假设我将这些推送到 Docker Hub。如果我要使用 Docker Buildkit 的外部缓存功能,那么我想尝试通过拉入远程 some-expensive-base-image:latest 来尝试在我的 CI 管道上节省构建时间。图像作为构建 some-expensive-base-image 时的缓存目标。而且,我想同时使用刚刚构建的 some-expensive-base-image图像和 Remote my-app:latest image 作为后一个图像的缓存。我相信我需要两者以防止需要 some-expensive-base-image 的步骤不需要重建,因为……嗯……它们很贵。
这是我的构建脚本的样子:
export DOCKER_BUILDKIT=1
docker build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from some-expensive-base-image:latest --target some-expensive-base-image -t some-expensive-base-image:edge .
docker build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from some-expensive-base-image:edge --cache-from my-app:latest --target my-app -t my-app:edge .
我的问题: --cache-from的顺序是不是?第二个参数很重要 docker build ?
我在此构建的 CI 管道上得到了不一致的结果。构建后一个镜像时会发生缓存未命中,即使没有任何会导致缓存破坏的代码更改。可以毫无问题地拉取缓存 Minefest。有时会拉取缓存镜像,但有时需要重新运行后一个目标的所有步骤。我不知道为什么。
碰巧,我应该尝试 docker pull运行 docker build 之前的两个图像我的脚本中的命令?
此外,我知道我在示例中提到了 Docker Hub,但在现实生活中,我的应用程序使用 AWS ECR 作为其远程 Docker 存储库。这对正确的 Buildkit 功能重要吗?

最佳答案

是的,订单--cache-from很重要!
the explanation on Github from the person who implemented the feature ,这里引用:

When using multiple --cache-from they are checked for a cache hit in the order that user specified. If one of the images produces a cache hit for a command only that image is used for the rest of the build.


我过去也遇到过类似的问题,您可能会发现对 check ths answer, where I've shared about using Docker cache in the CI 有用.

关于docker - 使用 Docker Buildkit 构建镜像时 --cache-from 参数的顺序是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62868610/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com