Как собирают Docker образы для приложений на Golang

«Как собирают Docker образы для приложений на Golang» — вопрос из категории DevOps, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Docker-образы для Go-приложений собирают с использованием многоэтапной сборки (multi-stage build) для уменьшения размера итогового образа.

  1. Этап сборки: Используется образ с Go (например, golang:1.21-alpine) для компиляции приложения.
  2. Этап запуска: Используется минимальный образ (например, 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 (пустой образ).