我有一个FROM golang:1.6-alpine
的Dockerfile。我想在执行docker build
时尽可能多地使用docker图像缓存来加快速度。
为此,我想我会先添加ADD vendor /go/src/…/mypackage/vendor
作为第一步,然后运行go install -v …/mypackage
。但是,这会导致销售的包(构建时间的大部分)只能构建。
是否有显式构建所有已售出的软件包(即…/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
答案 0 :(得分:2)
/vendor
文件夹中。这允许方便地管理这些依赖性。我个人使用godep
来管理它。/vendor
文件夹添加到我的包的子目录中,而是直接在源目录/vendor
下的/go/src
文件夹中添加所有包。 / LI>
/pkg
目录中,无论它们是否已被出售'或不,这个解决方案是稳定的。go install ./...
后在src
目录上运行vendor
文件夹,然后继续构建的其余部分。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"