首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在单独的Docker层中构建go依赖项

在单独的Docker层中构建go依赖项
EN

Stack Overflow用户
提问于 2019-03-28 03:20:25
回答 1查看 924关注 0票数 7

我正在尝试加速我的Go应用程序的Docker构建。现在,它仅构建依赖项就花费了大约60美元(它是一个k8s控制器,所以有很多)。

一个非常重要的限制:我的项目依赖于私有的GitHub代码库。我在docker build之外做go mod vendor,在那里我有设置repos的凭证。

我现在的Dockerfile大致是:

代码语言:javascript
复制
FROM golang:1.12

WORKDIR /src

COPY . .
RUN go build -mod=vendor
...

即使不需要下载docker build,构建也需要一段时间,因为每个deps都会重新构建数百个包。

我想要做的是:

代码语言:javascript
复制
FROM golang:1.12

WORKDIR /src

# these shouldn't change very often
COPY go.mod go.sum vendor ./
RUN go build -mod=vendor <all dependency packages>

COPY . .
RUN go build -mod=vendor
...

我尝试过解析go.mod,但它当然会列出模块,而不是包。我试过go list,但从来没有得到一个有效的咒语。

EN

回答 1

Stack Overflow用户

发布于 2019-03-28 03:39:35

我有一个看起来很管用的恶作剧:

代码语言:javascript
复制
FROM golang:1.12

WORKDIR /src

COPY go.mod go.sum ./
COPY vendor/ ./vendor
RUN go build -mod=vendor $(cat deps|grep -v mypackage | grep -v internal)

COPY . .
RUN go build -mod=vendor
...
代码语言:javascript
复制
go list -f '{{join .Deps "\n"}}'  > deps
docker build .
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55384975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档