Мультистейдж-сборка Go в Docker — минимальный размер

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

dockergomultistage

👁 Если ты деплоишь 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 #разработка

❤️ @recura_tech

Скриншот тёмного терминала с примером Dockerfile для мультистейдж‑сборки Go‑приложения: виден код сборки (builder → distroless) и логотип RECURA.
Пример Dockerfile для мультистейдж-сборки Go в Docker (builder → distroless).

Читайте так же