我正在尝试加快我的 Go 应用程序的 Docker 构建速度。现在,它可能花费 60 年代来构建依赖项(它是一个 k8s 控制器,所以有很多)。
一个非常重要的限制:我的项目依赖于私有 GitHub 存储库。我在go mod vendor
外面做docker build
,我在那里建立了回购协议。
我现在的 Dockerfile 大致是:
FROM golang:1.12
WORKDIR /src
COPY . .
RUN go build -mod=vendor
...
即使不必下载 deps,该构建也需要一段时间,因为它会在每个docker build
.
我想做的是:
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
...
我尝试了 parsing go.mod
,但当然列出了模块,而不是包。我尝试过go list
,但从未设法获得有效的咒语。