Ответ
Строго обязательной является только одна инструкция: FROM. Она определяет базовый образ, от которого начинается сборка.
Однако, чтобы контейнер выполнял полезную работу, почти всегда требуются еще две ключевые инструкции:
-
FROM <image>[:<tag>]— задает начальный слой образа. Без неё сборка невозможна.FROM ubuntu:22.04 FROM python:3.11-slim FROM alpine:latest -
RUN <command>— выполняет команды в процессе сборки для установки пакетов, настройки среды и т.д.RUN apt-get update && apt-get install -y curl nginx RUN pip install --no-cache-dir -r requirements.txt -
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) не являются обязательными, но критически важны для создания эффективных, безопасных и поддерживаемых образов.