Вопрос проверяет понимание внутреннего устройства Docker-образов и влияния порядка инструкций на скорость сборки.
Docker-образ состоит из набора неизменяемых слоёв. Каждый слой создаётся одной инструкцией Dockerfile. Docker использует кеш слоёв, если инструкция и входные данные не изменились. Это ускоряет повторные сборки. Неправильный порядок инструкций приводит к потере кеша.
Docker-образы строятся как слоёная файловая система, где каждый слой — результат отдельного шага сборки.
Слой Docker-образа — это неизменяемый результат выполнения одной инструкции Dockerfile.
Перед оптимизацией сборки важно понимать механику:
Каждая инструкция = слой
FROM
RUN
COPY
ADD
Слои неизменяемы
при изменении шага создаётся новый слой
старый слой остаётся в кеше
Docker сравнивает:
инструкцию Dockerfile
её аргументы
содержимое файлов (для COPY и ADD)
Если всё совпадает — слой берётся из кеша.
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
Изменение исходного кода не инвалидирует слой с зависимостями.
установка зависимостей после COPY . .
объединение логически разных шагов в один RUN
частые изменения верхних слоёв
Грамотная работа со слоями и кешем позволяет значительно ускорить сборку и уменьшить нагрузку на CI/CD.