Multi-stage - несколько этапов в одном Dockerfile; итоговый образ содержит только артефакт последнего этапа. В первом этапе компилируют Go-бинарник (нужен golang образ), во втором копируют только бинарник в минимальный образ (scratch, alpine). Итог: маленький образ без компилятора и исходников, быстрый деплой и меньше поверхность атак.
FROM golang:1.21 AS build
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o server .
FROM alpine:3.19
COPY --from=build /app/server /server
EXPOSE 8080
CMD ["/server"]