Что делает инструкция RUN в Dockerfile?

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

Ответ

Инструкция RUN в Dockerfile выполняет команды внутри промежуточного контейнера во время сборки образа (build time). Результат выполнения (установленные пакеты, созданные файлы) фиксируется в виде нового слоя образа.

Базовый пример:

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

Эта команда обновит списки пакетов и установит nginx в создаваемый образ.

Ключевые практики для оптимизации:

  1. Объединение команд: Каждая инструкция RUN создает новый слой. Чтобы уменьшить количество слоев и итоговый размер образа, команды объединяют.
  2. Очистка кэша: Кэш менеджера пакетов нужно чистить в той же инструкции RUN, чтобы он не попал в финальный слой.

Оптимизированный пример для Debian/Ubuntu:

RUN apt-get update 
    && apt-get install -y --no-install-recommends curl ca-certificates 
    && rm -rf /var/lib/apt/lists/*

Здесь:

  • --no-install-recommends устанавливает только основные пакеты.
  • rm -rf /var/lib/apt/lists/* удаляет кэш списков пакетов, экономя место.

RUN — это инструмент для подготовки среды приложения (установка зависимостей, компиляция кода), в отличие от CMD или ENTRYPOINT, которые определяют команду для запуска в контейнере во время выполнения (runtime).