👁 Если ты деплоишь Go-приложения в контейнеры, стандартная сборка может тащить за собой гигабайты лишнего. Чтобы этого избежать, используют multi-stage build — подход, который разделяет этапы сборки и выполнения, позволяя в прод-образе оставить только бинарник.
📝 Пример Dockerfile:
# Stage 1: Build FROM golang:1.21 AS builder WORKDIR /app COPY . . RUN go build -o main # Stage 2: Run FROM gcr.io/distroless/static COPY --from=builder /app/main / ENTRYPOINT ["/main"]
📌 Как это работает:
- В первом слое (golang:1.21) происходит сборка бинарника
- Затем создаётся второй образ на базе distroless, куда копируется только готовый файл
- В результате — сверхлёгкий и безопасный продакшн-образ (~10MB), без шелла, package manager’ов и прочего мусора
🔎 Почему это круто:
- Минимальный attack surface: нельзя зайти в контейнер через bash или sh
- Быстрая передача по сети и загрузка
- Легче кэшировать в CI/CD пайплайне
- Идеально для микросервисов в Kubernetes
❗️ Такой Dockerfile — обязательная практика в Go-проектах, если ты всерьёз относишься к безопасности и скорости.
tags: #docker #go #разработка



