使用Docker容器中的1.10构建缓存加速Go构建

我有一个带有大型供应商/目录的Go项目,几乎从未改变过.

我正在尝试使用新的go 1.10构建缓存功能来加速我在本地Docker引擎中的构建.

避免重新编译我的供应商/目录就足够了.所以我正在尝试将Go等效于Python的这种常见Dockerfile模式:

FROM python
COPY requirements.txt .              # <-- copy your dependency list
RUN pip install -r requirements.txt  # <-- install dependencies
COPY ./src ...                       # <-- your actual code (everything above is cached)

同样我试过:

FROM golang:1.10-alpine
COPY ./vendor ./src/myproject/vendor
RUN go build -v myproject/vendor/... # <-- pre-build & cache "vendor/"
COPY . ./src/myproject

然而,这是“无法找到包”错误(可能是因为您无法在供应商/直接正常构建东西).

有没有人能够解决这个问题?

最佳答案
这是适合我的东西:

FROM golang:1.10-alpine
WORKDIR /usr/local/go/src/github.com/myorg/myproject/
COPY vendor vendor
RUN find vendor -maxdepth 2 -mindepth 2 -type d -exec sh -c 'go install -i github.com/myorg/myproject/{}/... || true' \;
COPY main.go .
RUN go build main.go

它确保首先安装出售的库.只要你不改变图书馆,你就是好的.

相关文章

最近一直在开发Apworks框架的案例代码,同时也在一起修复Apw...
最近每天都在空闲时间努力编写Apworks框架的案例代码WeText。...
在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,...
最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...