【问题标题】:How can I cache packages build artefacts for docker build? [duplicate]如何为 docker build 缓存包构建工件? [复制]
【发布时间】:2021-08-11 04:50:41
【问题描述】:

一个典型的 go docker 模式是这样的:

# cache modules
COPY go.mod .
COPY go.sum .
RUN go mod download

COPY . .
RUN make

这将在编译实际源代码之前为下载的包创建一个(缓存)层。在添加应用程序之前,不仅要下载,还要编译包以进一步加快重复构建,这将是非常棒的。

如何强制编译所有下载的包而不考虑父应用程序?

【问题讨论】:

标签: docker go


【解决方案1】:

在 docker build 中使用go mod download 的目的是避免等待编译依赖项的源代码。由于您想避免这种行为,因此可以将该行替换为

RUN go get -d -v

【讨论】:

  • 我很高兴没有等待下载,但我也不想等待编译。似乎 -d 不会那样做。
  • 你提出问题的方式具有误导性强制编译所有下载的包所以你真正想要的是缓存应用程序源的编译,如果没有对你的源文件,对吗?
  • 没有。如果可能的话,我想缓存我的应用程序所依赖的下载包的编译。这个想法是,当 go.mod 不更改时,包不会更改,因此即使我的应用程序的代码发生更改,中间编译结果仍然可用。也许这样的中间结果(如 obj 文件)不存在。
猜你喜欢
  • 2019-03-12
  • 2021-02-20
  • 2016-12-25
  • 2018-05-21
  • 2023-03-17
  • 2020-08-12
  • 2020-02-23
  • 2019-07-01
相关资源
最近更新 更多