加快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"