docker - 如何使用拉取的镜像作为缓存( `docker buildx`)

标签 docker dockerfile docker-build buildx docker-tag

我们正在 CI 中构建 Docker 镜像,但我们无法让 docker buildx build 使用拉取的镜像作为缓存。

以下是执行的docker命令:

docker pull "ghcr.io/foo/bar/baz"
docker buildx build . --tag "ghcr.io/foo/bar/baz"
docker push "ghcr.io/foo/bar/baz"

如何修改docker buildx build以使用拉取的镜像作为缓存,确保在命令不变的情况下不会执行每个RUN

这是我们的 Dockerfile:

FROM amd64/alpine:3.16 as build0

RUN apk update && apk add autoconf bash [...]
FROM build0 as build1

RUN mkdir /tmp/build-deps && cd /tmp/build-deps && [...]

FROM build1 as build2
RUN cd /tmp/build-deps && wget ${patch_uri} && [...]

FROM build2 as build3
RUN mkdir /root/build-deps && [...]

FROM build3 as build4
RUN cd /tmp/build-deps/ && mkdir php-ext && cd php-ext && [...]

最佳答案

使用docker buildx构建时使用--cache-from选项

docker pull "ghcr.io/foo/bar/baz"
docker buildx build . --tag "ghcr.io/foo/bar/baz" --cache-from="ghcr.io/foo/bar/baz"
docker push "ghcr.io/foo/bar/baz"

通过指定此选项,Docker 将重新使用拉取镜像中的层,其中 Dockerfile 中的初始步骤未更改且层相同。

关于docker - 如何使用拉取的镜像作为缓存( `docker buildx`),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77144403/

相关文章:

docker - 让 Dockerised 站点在 Traefik 反向代理后面运行

docker - Docker权限不足,无法设置线程优先级

docker - 如何在if语句中更改docker ARG值?

Docker容器-向其中注入(inject)敏感数据的最佳实践是什么

python - 远程调试在 docker 容器中运行的 python 代码的最佳和简单方法是什么?

firebase - 哪个 docker 镜像包含 firebase 和 gcloud 的 CLI?

node.js - 带有 Docker 的 Nodemailer

amazon-web-services - 我可以使用docker-compose build创建容器镜像吗?

curl - Docker 构建 ADD 与 RUN curl

docker - 为什么 `chmod`导致 `docker build`磁盘空间不足