Я нашел эту статью после того, как погуглил еще несколько, которые охватывают процесс: Использование go мод загрузки для ускорения Golang Docker сборок
Суть хитрости заключается в том, чтобы скопировать файлы go.mod
и go.sum
в контейнер, затем запустить go mod download
для загрузки зависимостей, а затем на другом шаге продолжить сборку.
Это работает, потому что ваш файлы go.mod
и go.sum
не изменяются , если вы не добавите больше зависимостей. Таким образом, когда происходит следующий оператор RUN
, который go mod download
docker знает, что он может кэшировать этот слой. ( Источник )
FROM golang:1.13.9-buster as builder
# Make Build dir
RUN mkdir /build
WORKDIR /build
# Copy golang dependency manifests
COPY go.mod .
COPY go.sum .
# Cache the dependency download in a layer.
RUN go mod download
# add the source code
COPY . .
# Build
RUN go build -o app
# Run
FROM debian:buster-slim
COPY --from=builder /build
WORKDIR /app
CMD ["./app"]