Без какой инструкции не может существовать Dockerfile?

«Без какой инструкции не может существовать Dockerfile?» — вопрос из категории Docker, который задают на 29% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Инструкция FROM является обязательной для любого валидного Dockerfile. Она определяет базовый образ, от которого начинается сборка. Без неё сборщик Docker не имеет контекста для выполнения последующих инструкций.

Ключевые моменты:

  1. Позиция: FROM должна быть первой исполняемой инструкцией в Dockerfile. Ей могут предшествовать только инструкции ARG, объявляющие переменные для этапа FROM.
  2. Назначение: Задает начальную точку — операционную систему (например, ubuntu:22.04) или готовый средовый образ (например, python:3.11-slim, node:18-alpine).

Пример минимального Dockerfile:

# Обязательная инструкция FROM
FROM alpine:latest
# Далее можно добавлять RUN, COPY, CMD и другие инструкции
CMD ["echo", "Hello from container"]

Особый случай — scratch: Для создания сверхминимальных образов можно использовать специальный образ scratch, который представляет собой пустую файловую систему.

FROM scratch
COPY myapp /myapp
CMD ["/myapp"]

В своей практике я всегда явно указываю тег версии в FROM (например, nginx:1.25, а не просто nginx), чтобы обеспечить воспроизводимость сборок и избежать неожиданных изменений при обновлении базового образа.