Ответ
Строго обязательной является только одна инструкция: 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) не являются обязательными, но критически важны для создания эффективных, безопасных и поддерживаемых образов.
Ответ 18+ 🔞
А, слушай, про Dockerfile? Ну, тут всё просто, как три копейки. Главное, что тебе надо запомнить — FROM это святое, без неё нихуя не соберёшь. Это как фундамент, ёпта. Без базового образа ты просто в воздухе строишь.
Но если ты хочешь, чтобы твой контейнер не просто собрался, а ещё и хоть что-то делал, то без двух других ребят тебе тоже каюк.
-
FROM <образ>[:<тег>]— это начало начал. Без этой строчки ты можешь сразу идти на хуй, потому что собирать не из чего.FROM ubuntu:22.04 FROM python:3.11-slim FROM alpine:latest -
RUN <команда>— вот это уже рабочий инструмент. Пока образ собирается, эта инструкция делает всю грязную работу: ставит пакеты, ковыряется в настройках, создаёт файлы. Без неё твой образ — просто голая болванка.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 и прочие) — это уже опциональный кайф. Без них жить можно, но с ними образ получается аккуратнее, безопаснее и не такой распиздяйский. Но для старта хватит и трёх китов, которые я перечислил. Главное — начать, а там уже разберёшься.