首页 >后端开发 >Golang >如何有效缓存Golang项目的Docker镜像中的依赖关系?

如何有效缓存Golang项目的Docker镜像中的依赖关系?

Susan Sarandon
Susan Sarandon原创
2024-10-27 00:51:02489浏览

How to Effectively Cache Dependencies in Docker Images for Golang Projects?

Docker 镜像中的预构建和缓存依赖关系

制作 Docker 镜像时,需要缓存依赖关系以加快构建过程。本文解决了预构建所有必需模块并缓存它们的问题。

一种方法是在构建映像时添加一个层来缓存依赖项。但是,此步骤需要构建依赖关系,这可能非常耗时。另一种方法是使用 go build 命令。

另一个选项是预先构建 go.mod 文件中列出的所有依赖项。幸运的是,Docker 提供了解决这个问题的文档。建议的方法是按以下方式构建 Dockerfile:

FROM --platform=${BUILDPLATFORM} docker.io/golang:1.16.7-alpine AS build
ARG TARGETOS
ARG TARGETARCH
WORKDIR /src
ENV CGO_ENABLED=0
COPY go.* .
RUN go mod download
COPY . .
RUN --mount=type=cache,target=/root/.cache/go-build \
GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -o /out/example .

FROM scratch
COPY --from=build /out/example /

对于单个架构进行简化,相关的缓存方面如下所示:

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 build 命令构建映像时包含 DOCKER_BUILDKIT=1,或使用 docker buildx。测试证实了这种方法的有效性。

以上是如何有效缓存Golang项目的Docker镜像中的依赖关系?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn