Какие инструкции являются обязательными в Dockerfile?

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

Ответ

Строго обязательной является только одна инструкция: FROM. Она определяет базовый образ, от которого начинается сборка.

Однако, чтобы контейнер выполнял полезную работу, почти всегда требуются еще две ключевые инструкции:

  1. FROM <image>[:<tag>] — задает начальный слой образа. Без неё сборка невозможна.

    FROM ubuntu:22.04
    FROM python:3.11-slim
    FROM alpine:latest
  2. RUN <command> — выполняет команды в процессе сборки для установки пакетов, настройки среды и т.д.

    RUN apt-get update && apt-get install -y curl nginx
    RUN pip install --no-cache-dir -r requirements.txt
  3. CMD или ENTRYPOINT (или их комбинация) — определяет команду, которая будет выполняться при запуске контейнера. Без них контейнер запустится с командой по умолчанию от базового образа и сразу завершится.

    CMD ["nginx", "-g", "daemon off;"]
    ENTRYPOINT ["/app/start.sh"]

Минимальный рабочий Dockerfile:

FROM alpine:latest
RUN echo 'Hello from build time' > /tmp/build.log
CMD ["cat", "/tmp/build.log"]

Другие инструкции (COPY, WORKDIR, EXPOSE, ENV, USER) не являются обязательными, но критически важны для создания эффективных, безопасных и поддерживаемых образов.