Проверяет знание базовых Docker-образов для Go-сервисов и понимание принципов создания лёгких контейнеров.
Базовый образ определяет окружение, в котором работает контейнер. Для Go-приложений важно, что компилятор создаёт статически связанный бинарник, который не зависит от системных библиотек. Поэтому можно использовать минимальные образы, что уменьшает размер и повышает безопасность.
# Этап сборки
FROM golang:1.22-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o server .
# Финальный образ
FROM scratch
COPY --from=builder /app/server /server
EXPOSE 8080
ENTRYPOINT ["/server"]Здесь используется multi-stage build: сначала компилируем в образе с Go, затем копируем бинарник в scratch. Это уменьшает итоговый размер до нескольких мегабайт.
Для production чаще берут scratch или distroless, чтобы минимизировать поверхность атаки. Для разработки и отладки удобнее alpine, так как можно зайти в контейнер и посмотреть логи или выполнить команды.
Итог: выбор базового образа зависит от целей: scratch — максимальная лёгкость, alpine — удобство, distroless — баланс. Для Go-сервисов это критично, так как позволяет создавать эффективные и безопасные контейнеры.
Уровень
Рейтинг:
4
Сложность:
3
Навыки
Docker
Golang
Ключевые слова
Подпишись на Golang Developer в телеграм