Ответ
Инструкция RUN в Dockerfile выполняет команды внутри промежуточного контейнера во время сборки образа (build time). Результат выполнения (установленные пакеты, созданные файлы) фиксируется в виде нового слоя образа.
Базовый пример:
RUN apt-get update && apt-get install -y nginx
Эта команда обновит списки пакетов и установит nginx в создаваемый образ.
Ключевые практики для оптимизации:
- Объединение команд: Каждая инструкция
RUNсоздает новый слой. Чтобы уменьшить количество слоев и итоговый размер образа, команды объединяют. - Очистка кэша: Кэш менеджера пакетов нужно чистить в той же инструкции
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).