Ответ
Инструкция FROM в Dockerfile определяет базовый образ, на основе которого начинается сборка нового образа. Это обязательная первая инструкция (за исключением необязательных инструкций ARG, которые могут предшествовать FROM). Она задает начальный слой файловой системы и окружение для последующих команд.
Синтаксис и примеры:
# Использование официального образа с конкретным тегом
FROM ubuntu:22.04
# Использование минимального образа Alpine Linux
FROM alpine:3.18
# Использование образа для конкретного языка/фреймворка
FROM python:3.11-slim
# Использование в многоступенчатой сборке (multi-stage build)
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .
# Второй этап: создание финального легковесного образа
FROM alpine:3.18
COPY --from=builder /app/myapp /usr/local/bin/
CMD ["myapp"]
Практические аспекты для DevOps:
- Выбор базового образа: Определяет размер, безопасность и состав финального образа. Для продакшена предпочтительны минимальные образы (
alpine,distroless,scratch). - Управление версиями: Всегда указывайте конкретный тег (например,
ubuntu:22.04), а не плавающийlatest, чтобы обеспечить воспроизводимость сборок. - Безопасность: Регулярно обновляйте базовые образы в CI/CD-пайплайнах для применения исправлений уязвимостей.
- Кэширование слоев: Сборка начинается с этого образа, и его слои кэшируются, что ускоряет последующие сборки.