Какое минимальное количество инструкций необходимо для рабочего Dockerfile?

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

Ответ

Технически, единственная обязательная инструкция в Dockerfile — это FROM. Она определяет базовый образ, от которого наследуется сборка.

Минимальный допустимый Dockerfile (1 инструкция):

FROM alpine:latest

Однако контейнер, собранный из такого образа, не имеет команды по умолчанию и завершит работу сразу после запуска (docker run), так как нечего выполнять.

Минимальный рабочий Dockerfile (2 инструкции) должен включать команду для запуска. Обычно это CMD или ENTRYPOINT.

FROM alpine:latest
CMD ["echo", "Hello from a minimal Docker image!"]

Почему FROM обязательна? Docker строит образы послойно. Инструкция FROM задаёт начальный слой (базовый образ), который содержит файловую систему (например, корень Alpine или Ubuntu). Все последующие инструкции (RUN, COPY, CMD) добавляют изменения поверх этого базового слоя.

Практический пример и сборка:

  1. Создайте файл Dockerfile.min с содержимым выше (2 инструкции).
  2. Соберите образ:
    docker build -t minimal:latest -f Dockerfile.min .
  3. Запустите контейнер:
    docker run --rm minimal:latest
    # Вывод: Hello from a minimal Docker image!

Важно для DevOps:

  • Даже в сложных Dockerfile первая инструкция — всегда FROM.
  • Выбор базового образа (alpine для минимального размера, distroless для безопасности, ubuntu для полноты) — ключевое архитектурное решение.
  • Инструкции CMD и ENTRYPOINT определяют, как контейнер будет запускаться в оркестраторах вроде Kubernetes.