我们正在 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/