Какую роль выполняет директива FROM в Dockerfile?

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

Ответ

Директива FROM в Dockerfile задает базовый образ, на основе которого начинается построение нового Docker-образа. Это обязательная и, как правило, первая инструкция в файле (после возможных инструкций ARG).

Пример:

# Использование официального легковесного образа Java
FROM openjdk:17-jdk-slim

# Последующие инструкции добавляют приложение в этот базовый образ
COPY ./app.jar /app/app.jar
CMD ["java", "-jar", "/app/app.jar"]

Практическое значение и нюансы:

  • Основа сборки: Все последующие инструкции (RUN, COPY, CMD) применяются поверх этого базового слоя.
  • Указание версии: Рекомендуется использовать конкретный тег (например, node:18-alpine) вместо latest для воспроизводимости сборок.
  • Многоэтапные сборки: В одном Dockerfile может быть несколько инструкций FROM для создания легковесных финальных образов (multi-stage builds).
  • Минимальный образ: FROM scratch указывает на пустой базовый образ. Это используется для создания минимальных образов, содержащих только статически скомпилированный бинарный файл.