预构建依赖关系以加快 Docker 镜像构建
构建 Docker 镜像可能是一个耗时的过程,尤其是在需要依赖时在它们可以被缓存之前构建。为了优化这个过程,可以预先构建所有必需的模块并缓存它们。
Dockerfile 结构
实现此目的的推荐 Dockerfile 结构如下:
FROM docker.io/golang:1.16.7-alpine AS build WORKDIR /src COPY go.* . RUN go mod download COPY . . RUN --mount=type=cache,target=/root/.cache/go-build go build -o /out/example . FROM scratch COPY --from=build /out/example /
或者,对于单个架构构建,您可以将 Dockerfile 简化为:
FROM docker.io/golang:1.16.7-alpine AS build WORKDIR /src COPY go.* . RUN go mod download COPY . . RUN --mount=type=cache,target=/root/.cache/go-build go build -o /out/example . FROM scratch COPY --from=build /out/example /
缓存挂载
这个的关键优化是在 /root/.cache/go-build 上挂载一个缓存目录。这是 Go 构建缓存的默认位置。第一次构建将填充此缓存,后续构建将重用缓存的文件,从而显着减少构建时间。
使用 Docker BuildKit 进行构建
使用此缓存机制实际上,您必须在启用 Docker BuildKit 的情况下进行构建。您可以通过在构建镜像之前设置 DOCKER_BUILDKIT=1 来实现此目的:
DOCKER_BUILDKIT=1 docker build -t myimage .
或者,您可以使用 docker buildx:
docker buildx build -t myimage .
通过预构建和缓存依赖项,您可以大大减少 Docker 镜像的构建时间,尤其是对于大型或复杂的项目。这种优化可以在开发和部署过程中节省大量时间。
以上是如何通过预构建依赖项和使用构建缓存来优化 Docker 映像构建?的详细内容。更多信息请关注PHP中文网其他相关文章!