我正在尝试加速我的Go应用程序的Docker构建。现在,它仅构建依赖项就花费了大约60美元(它是一个k8s控制器,所以有很多)。
一个非常重要的限制:我的项目依赖于私有的GitHub代码库。我在docker build之外做go mod vendor,在那里我有设置repos的凭证。
我现在的Dockerfile大致是:
FROM golang:1.12
WORKDIR /src
COPY . .
RUN go build -mod=vendor
...即使不需要下载docker build,构建也需要一段时间,因为每个deps都会重新构建数百个包。
我想要做的是:
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,但从来没有得到一个有效的咒语。
发布于 2019-03-28 03:39:35
我有一个看起来很管用的恶作剧:
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
...go list -f '{{join .Deps "\n"}}' > deps
docker build .https://stackoverflow.com/questions/55384975
复制相似问题