加快dockerbuild造golang vendoring

我有一个Dockerfile是FROM golang:1.6-alpine 。 我想在执行docker build尽可能的使用docker的图片caching来加快速度。

为此,我想添加ADD vendor /go/src/…/mypackage/vendor作为第一步,最后运行go install -v …/mypackage 。 但是,这会导致只有构build时间的批量包(这是大部分构build时间)。

是否有明确build立所有的自营商品包(即源内…/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文件夹中。 这可以方便地pipe理这些依赖关系。 我个人使用godep来pipe理这个。
  • 在容器内部,不是添加/vendor文件夹作为我的包的子目录,而是直接在源目录/go/src下的/vendor文件夹中添加所有包。
  • 由于go的销售是关于改变导入path的,并且构build工件被存储在/pkg目录中,而不pipe它们是否被“自动销售”,所以该解决scheme是稳定的。
  • 为了享受加速,并且不必重build所有的商品包,除非它们被改变,Dockerfile在添加vendor文件夹之后在src目录上运行go install ./... install。/ go install ./... ,然后继续其余的build立。

Dockerfile:

 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"