← Назад к вопросам

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

1.0 Junior🔥 301 комментариев
#Docker и контейнеризация

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Обязательная инструкция в Dockerfile

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

Почему FROM обязательна?

Ответ прост: каждый Docker образ должен иметь базовый образ, на котором он строится. Базовый образ — это стартовая точка, которая включает:

  • Файловую систему (обычно Linux дистрибутив)
  • Установленные программы (sh, bash, компиляторы, библиотеки)
  • Переменные окружения и конфигурацию
  • Метаданные (labels, entrypoint и т.д.)

Это означает, что Dockerfile всегда начинается с инструкции FROM:

FROM ubuntu:22.04
# или
FROM node:18-alpine
# или
FROM python:3.11
# или для минимальных образов
FROM scratch

Исключение: scratch

FROM scratch — это специальный, пустой образ, который используется только для:

  • Статических бинарников (скомпилированные Go приложения)
  • Минимизации размера (нет ОС, только бинарник)
# Многоэтапная сборка
FROM golang:1.20 as builder
COPY . /src
RUN cd /src && go build -o app

# Финальный образ
FROM scratch
COPY --from=builder /src/app /
ENTRYPOINT ["/app"]

Остальные инструкции опциональны

Вот примеры правильных, но минималистических Dockerfile:

Вариант 1: только FROM

FROM python:3.11

Вариант 2: FROM + CMD

FROM nginx:latest
CMD ["nginx", "-g", "daemon off;"]

Вариант 3: FROM + COPY

FROM alpine
COPY app /

Все эти Dockerfile'ы валидны и могут быть собраны: docker build -t myimage .

Частые ошибки

Ошибка: Dockerfile без FROM

RUN apt-get update
RUN apt-get install -y nginx

При попытке сборки:

docker build -t myimage .
error: FROM instruction must be the first non-comment instruction

Правильно:

FROM ubuntu:22.04
RUN apt-get update
RUN apt-get install -y nginx

Важный контекст для DevOps

Понимание обязательности FROM критично для:

  1. Code Review — вы заметите Dockerfile без FROM
  2. CI/CD pipelines — они будут падать при сборке без FROM
  3. Security — выбор правильного базового образа с пэтчами безопасности
  4. Performance — выбор лёгких образов (alpine vs ubuntu) влияет на скорость старта и размер
  5. Best practices — всегда явно указывайте версию FROM:
FROM node:latest

FROM node:18.17.1-alpine

Вывод

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

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