我读过文章,其中建议有一个专门的go mod download层来下载go依赖项。我知道该层是缓存的,如果依赖项在下一次构建中不改变,则将使用缓存层,从而节省我们的时间。我还注意到,使用BuildKit挂载功能,go build二进制结果被缓存在GO env GOCACHE目录中,以便用于将来的构建。
现在的问题是,很多时候,只有少数go依赖项被更改,因此缓存的go mod download层无效。因此,在下一次构建中,所有依赖项都将再次下载,即使只有少数依赖项已经更改。我的问题是,是否可以挂载下载的包(依赖项)?这样做有什么坏处呢?我还没有看到在Go Dockerfile最佳实践中使用这种技术。有点像
RUN --mount=type=cache,target=/go/pkg/mod go mod download发布于 2022-03-15 13:38:04
我想你可以开始这么做然后看看。对我来说,如果我不得不使用它,我会选择一个不同的挂载路径,只为了隔离本地环境。
RUN --mount=type=cache,target=/Users/me/Library/Caches go mod download我不认为安装下载的软件包有任何问题。在这个示例中,它用于apt。
然而,我认为我们也可以退一步,考虑不同的方法,以避免被等待码头建设所困扰。
我们可以安排构建(夜间构建等等),我不认为有任何理由这样频繁地进行本地停靠构建,特别是您的依赖项不应该经常更改。也许我错了,但我不认为我们需要。
我们还可以进一步分解go mod download并利用Docker等。
RUN go mod download package-never-change
RUN go mod download package-changes-frequently甚至
RUN go build ./package1
RUN go build ./package2它看起来可能有点乏味,但在某些情况下,它可能是有用的,例如,当不支持BuildKit时。
https://stackoverflow.com/questions/71478963
复制相似问题