首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Docker中缓存Go依赖项

在Docker中缓存Go依赖项
EN

Stack Overflow用户
提问于 2022-03-15 08:18:32
回答 1查看 1K关注 0票数 4

我读过文章,其中建议有一个专门的go mod download层来下载go依赖项。我知道该层是缓存的,如果依赖项在下一次构建中不改变,则将使用缓存层,从而节省我们的时间。我还注意到,使用BuildKit挂载功能,go build二进制结果被缓存在GO env GOCACHE目录中,以便用于将来的构建。

现在的问题是,很多时候,只有少数go依赖项被更改,因此缓存的go mod download层无效。因此,在下一次构建中,所有依赖项都将再次下载,即使只有少数依赖项已经更改。我的问题是,是否可以挂载下载的包(依赖项)?这样做有什么坏处呢?我还没有看到在Go Dockerfile最佳实践中使用这种技术。有点像

代码语言:javascript
复制
RUN --mount=type=cache,target=/go/pkg/mod go mod download
EN

回答 1

Stack Overflow用户

发布于 2022-03-15 13:38:04

我想你可以开始这么做然后看看。对我来说,如果我不得不使用它,我会选择一个不同的挂载路径,只为了隔离本地环境。

代码语言:javascript
复制
RUN --mount=type=cache,target=/Users/me/Library/Caches go mod download

我不认为安装下载的软件包有任何问题。在这个示例中,它用于apt

然而,我认为我们也可以退一步,考虑不同的方法,以避免被等待码头建设所困扰。

我们可以安排构建(夜间构建等等),我不认为有任何理由这样频繁地进行本地停靠构建,特别是您的依赖项不应该经常更改。也许我错了,但我不认为我们需要。

我们还可以进一步分解go mod download并利用Docker等。

代码语言:javascript
复制
RUN go mod download package-never-change
RUN go mod download package-changes-frequently

甚至

代码语言:javascript
复制
RUN go build ./package1
RUN go build ./package2

它看起来可能有点乏味,但在某些情况下,它可能是有用的,例如,当不支持BuildKit时。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71478963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档