Ответ
Инструкция FROM является единственной обязательной инструкцией в Dockerfile. Она должна быть первой значимой инструкцией (за исключением возможных инструкций ARG, предшествующих FROM для динамического указания базового образа).
Назначение FROM: Она задает базовый образ, от которого наследуется собираемый образ. Этот базовый образ содержит файловую систему (например, Ubuntu, Alpine Linux) и часто предустановленное ПО (например, python:3.9-slim).
Пример минимального валидного Dockerfile:
# Обязательная инструкция - указываем базовый образ
FROM alpine:latest
# Далее можно добавить другие инструкции (опционально)
CMD ["echo", "Hello from container"]
Почему FROM обязательна: Docker строит образы послойно. Инструкция FROM инициализирует новый этап сборки и устанавливает родительский образ, к слоям которого будут добавляться новые слои от последующих инструкций (RUN, COPY, ADD и т.д.). Без отправной точки сборка невозможна.
Особый случай ARG перед FROM:
Инструкцию FROM можно параметризовать с помощью ARG, объявленного до нее. Это позволяет динамически выбирать базовый образ во время сборки.
# ARG объявлен ДО FROM
ARG BASE_IMAGE=ubuntu:22.04
# FROM использует этот ARG
FROM ${BASE_IMAGE}
RUN apt-get update && apt-get install -y python3
Другие ключевые, но не обязательные инструкции:
RUN: Выполняет команду в слое образа (установка пакетов, компиляция).COPY/ADD: Копируют файлы из контекста сборки или из URL в образ.CMD/ENTRYPOINT: Определяют команду по умолчанию для запускаемого контейнера.WORKDIR: Устанавливает рабочую директорию.EXPOSE: Документирует порт, который контейнер будет слушать.
Без FROM команда docker build завершится с ошибкой: [internal] load metadata for docker.io/library/:latest -> failed to solve: docker.io/library/:latest: invalid reference format.