Ответ
Docker-образы для Go-приложений собирают с использованием многоэтапной сборки (multi-stage build) для уменьшения размера итогового образа.
- Этап сборки: Используется образ с Go (например,
golang:1.21-alpine) для компиляции приложения. - Этап запуска: Используется минимальный образ (например,
alpineилиscratch) для запуска бинарника.
Пример Dockerfile:
# Этап сборки
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
# Этап запуска
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp .
CMD ["./myapp"]
Ключевые моменты:
- Используйте
CGO_ENABLED=0для статической сборки, если нуженscratch. - Уменьшайте зависимости, удаляя кэш (
go mod downloadс--no-cache). - Для микросервисов можно использовать
scratch(пустой образ).