Ответ
Инструкция RUN выполняет команды в оболочке (например, /bin/sh) во время сборки образа Docker. Каждая инструкция RUN создаёт новый слой в итоговом образе. Это основной инструмент для настройки окружения внутри образа.
Типичные сценарии использования:
-
Установка системных пакетов и зависимостей:
RUN apt-get update && apt-get install -y curl git nginx && rm -rf /var/lib/apt/lists/*Объединение команд через
&&и очистка кэша в одномRUNуменьшает итоговый размер образа. -
Сборка приложений из исходного кода:
RUN go build -o /app/main ./cmd/server -
Настройка прав доступа и создание служебных директорий:
RUN groupadd -r appuser && useradd -r -g appuser appuser && mkdir -p /app/data && chown -R appuser:appuser /app
Лучшие практики, которым я следую:
- Минимизация слоёв: Объединяю логически связанные команды в один
RUN. - Кэширование: Docker кэширует результат каждого слоя
RUN. Изменение команды в середине Dockerfile инвалидирует кэш для этого и всех последующих слоёв. Поэтому редко меняемые операции (установка пакетов) стоит располагать выше, а часто меняемые (копирование кода) — ниже. - Безопасность: Использую официальные базовые образы и проверенные репозитории для установки пакетов.