Вопрос проверяет понимание многоэтапной сборки Docker для оптимизации размера образов и безопасности.
Многоэтапная сборка (multi-stage build) — это возможность Docker использовать несколько инструкций FROM в одном Dockerfile. Каждый этап может начинаться с разных базовых образов и выполнять свои инструкции. Финальный образ собирается только из необходимых артефактов, скопированных из предыдущих этапов.
Обычно при сборке приложения требуются инструменты компиляции, пакеты разработки и зависимости, которые не нужны в рантайме. Использование одного образа приводит к его раздуванию. Многоэтапная сборка решает эту проблему, позволяя разделить этапы сборки и выполнения.
Рассмотрим сборку Go-приложения. На этапе сборки используется образ с Go, компилируется бинарник. На финальном этапе используется минимальный образ, например alpine, куда копируется только скомпилированный бинарник.
# Этап сборки
FROM golang:1.20 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o myapp .
# Финальный этап
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]Многоэтапная сборка Docker — это стандартный подход для создания лёгких и безопасных образов. Её стоит применять в любом проекте, где требуется минимизировать размер контейнера и изолировать среду сборки от выполнения.
Уровень
Рейтинг:
4
Сложность:
5
Навыки
Docker
Kubernetes
Ключевые слова
Подпишись на Python Developer в телеграм