gpt4 book ai didi

go - 加速 golang vendor 的 docker 构建

转载 作者:IT王子 更新时间:2023-10-29 01:42:03 27 4
gpt4 key购买 nike

我有一个 Dockerfile,它是 FROM golang:1.6-alpine。我想在执行 docker build 时尽可能多地使用 docker 图像缓存来加快速度。

为此,我想我会添加 ADD vendor/go/src/.../mypackage/vendor 作为第一步,并最终运行 go install -v .../我的包。但是,这会导致销售包(构建时间的大部分)只能在那时构建。

有没有显式地构建所有销售包(即 …/vendor 目录中的源代码),但只有它们?

我希望我的 Dockerfile 看起来像这样:

FROM golang:1.6-alpine

ADD vendor /go/src/github.com/myuser/package/vendor
# missing: magic command to build only the vendored packages above

ADD *.go /go/src/github.com/myuser/package
RUN go install -v "github.com/myuser/package

最佳答案

  • 在主机中(在 docker 容器之外),包仍然存储在 /vendor 中。文件夹。这允许方便地管理这些依赖项。我个人使用 godep来管理这个。
  • 在容器内,而不是添加 /vendor文件夹作为我的包的子目录,我将所有包添加到 /vendor 中源目录下的文件夹/go/src直接。
  • 因为 go 的 vendoring 就是改变导入路径,构建工件存储在 /pkg 中目录,无论它们是否“供应”,此解决方案都是稳定的。
  • 为了享受加速,并且不必重建所有出售的包,除非它们被更改,Dockerfile 运行一个 go install ./...src 上添加 vendor 后的目录文件夹,然后继续构建的其余部分。

docker 文件:

FROM golang:1.6-alpine

# Add and install all vendored packages.
ADD vendor /go/src/
RUN cd /go/src && go install -v ./...

# ...

# Add and install our package's source files, without the vendor folder
ADD *.go "/go/src/github.com/myuser/mypackage"
RUN go install -v "/go/src/github.com/myuser/mypackage"

关于go - 加速 golang vendor 的 docker 构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38618432/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com