Я пытаюсь ускорить сборку Docker моего приложения Go.В настоящее время, возможно, 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
...
Я попытался разобрать go.mod
, ноконечно, в котором перечислены модули, а не пакеты.Я пытался go list
, но так и не смог получить рабочее заклинание.