将依赖项安装与 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中文网其他相关文章!