首页 >后端开发 >Golang >如何将 Go 模块依赖项安装与构建过程分开以加快 Docker 构建速度?

如何将 Go 模块依赖项安装与构建过程分开以加快 Docker 构建速度?

Susan Sarandon
Susan Sarandon原创
2024-12-20 18:26:11826浏览

How Can I Separate Go Module Dependency Installation from the Build Process for Faster Docker Builds?

将依赖项安装与 Go 模块中的构建分开

Go 1.11 引入了模块支持,它可以在构建期间自动进行依赖项安装并最大程度地减少重建。然而,一些开发人员更喜欢在单独的阶段手动获取依赖项,以利用容器缓存并优化重建速度。

vgo 解决方案

在 Go 的早期版本中,有没有手动获取依赖项的本机方法。但是,Go 存储库上的问题 #26610 解决了此功能:

go mod download

此命令允许您手动获取依赖项,而无需运行构建过程。要使用此命令,您只需要项目目录中的 go.mod 和 go.sum 文件。

Docker 实现

这是 Docker 构建脚本的示例实现缓存的多阶段构建并利用 go mod download:

FROM golang:1.17-alpine as builder
RUN apk --no-cache add ca-certificates git
WORKDIR /build

# Fetch dependencies
COPY go.mod go.sum ./
RUN go mod download

# Build
COPY . ./
RUN CGO_ENABLED=0 go build

# Create final image
FROM alpine
WORKDIR /
COPY --from=builder /build/myapp .
EXPOSE 8080
CMD ["/myapp"]

通过实现依赖项和构建阶段的分离,您可以利用容器缓存进行依赖项安装并最大限度地减少后续构建时间。

替代注意事项

除了 go mod 下载方法之外,文章“容器化您的 Go 开发人员”环境 – 第 2 部分”探讨了另一种优化构建速度的技术:利用 Go 编译器缓存。探索这两个选项可以帮助您选择适合您的特定项目和环境的最佳策略。

以上是如何将 Go 模块依赖项安装与构建过程分开以加快 Docker 构建速度?的详细内容。更多信息请关注PHP中文网其他相关文章!

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