我们正在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 && [...]
2条答案
按热度按时间7lrncoxx1#
使用
docker buildx
构建时使用--cache-from
选项通过指定此选项,Docker将重用从Dockerfile中初始步骤未更改且层相同的拉取映像中的层。
bfnvny8b2#
要在Docker Buildx中使用拉取的镜像作为缓存,您可以在docker buildx build命令中使用--build-arg BUILDKIT_INLINE_CACHE=1参数。这将启用BuildKit内联缓存,并允许将拉取的映像用作后续构建的缓存。
以下是如何修改docker buildx build命令以使用拉取的镜像作为缓存:
以下是对其他选项的解释:
通过这些修改,Docker Buildx将尝试在构建过程中使用拉取的映像作为缓存,确保如果命令保持不变,则不会执行每个RUN步骤。如果该高速缓存可用,并且Dockerfile中的命令没有更改,Docker将重用缓存的层,这可以显著加快CI构建。