Ответ
Да, директива FROM является обязательной для любого валидного Dockerfile. Она задает базовый образ, от которого наследуется собираемый контейнер. Docker не может начать сборку без отправной точки.
Исключение: образ scratch
scratch — это пустой, нулевой образ. Он используется для создания минимальных контейнеров, например, для статически скомпилированных приложений (Go, C++).
Пример Dockerfile с scratch:
# Базовый образ — «ничего»
FROM scratch
# Копируем в контейнер единственный исполняемый файл
COPY myapp /myapp
# Указываем команду для запуска
CMD ["/myapp"]
Динамический выбор базового образа
С помощью директивы ARG можно параметризовать выбор базового образа, но FROM все равно требуется.
ARG BASE_IMAGE=openjdk:17-alpine
FROM ${BASE_IMAGE}
...
Итог: Без FROM сборка завершится ошибкой. Использование FROM scratch — это способ начать с абсолютно пустой файловой системы, а не обойти требование директивы.