ecb*_*die 6 caching docker docker-buildkit
假设我正在使用 Docker Buildkit 构建镜像。我的图像来自多阶段 Dockerfile,如下所示:
FROM node:12 AS some-expensive-base-image
...
FROM some-expensive-base-image AS my-app
...
Run Code Online (Sandbox Code Playgroud)
我现在正在尝试构建这两个图像。假设我将这些推送到 Docker Hub。some-expensive-base-image:latest如果我要使用 Docker Buildkit 的外部缓存功能,那么我会希望在构建目标时通过拉入远程映像作为缓存来尝试节省 CI 管道上的构建时间some-expensive-base-image。而且,我想拉入刚刚构建的some-expensive-base-image图像和远程my-app:latest图像作为后一个图像的缓存。我相信我需要两者,以防止需要some-expensive-base-image重建的步骤,因为……嗯……它们很昂贵。
这就是我的构建脚本的样子:
FROM node:12 AS some-expensive-base-image
...
FROM some-expensive-base-image AS my-app
...
Run Code Online (Sandbox Code Playgroud)
我的问题:参数的顺序--cache-from对第二个重要吗docker build?
对于此构建,我的 CI 管道得到的结果不一致。即使没有任何可能导致缓存破坏的代码更改,在构建后一个映像时也会发生缓存未命中的情况。Cache Minefest 可以毫无问题地拉取。有时会拉取缓存映像,但有时需要重新运行后一个目标的所有步骤。我不知道为什么。
碰巧,我应该在运行脚本中的命令docker pull之前尝试使用两个图像吗?docker build
另外,我知道我在示例中提到了 Docker Hub,但在现实生活中,我的应用程序使用 AWS ECR 作为其远程 Docker 存储库。这对于正确的 Buildkit 功能有影响吗?
是的,事情的顺序--cache-from!
请参阅实现该功能的人在 Github 上的解释,引用如下:
当使用多个 --cache-from 时,将按照用户指定的顺序检查缓存命中。如果其中一个映像为某个命令生成了缓存命中,则只有该映像才会用于构建的其余部分。
我过去也遇到过类似的问题,您可能会发现检查这个答案很有用,我在其中分享了有关在 CI 中使用 Docker 缓存的信息。
| 归档时间: |
|
| 查看次数: |
1086 次 |
| 最近记录: |