Кеширование в Docker происходит на основе слоев при сборке образа. Dockerfile состоит из инструкций, каждая из которых создает новый слой. При последующих сборках, если инструкция и ее контекст не изменились, Docker использует существующий слой из кеша вместо выполнения инструкции заново.
Факторы, влияющие на invalidation кеша:
RUN apt-get update на RUN apt-get install).COPY, ADD). Например, изменение содержимого файла, который копируется в образ.--no-cache: Явное отключение кеширования для всей сборки.Процесс кеширования:
Пример влияния порядка инструкций:
Предположим, у вас есть Dockerfile, который сначала копирует ваш код, а затем устанавливает зависимости. Если вы часто меняете код, но редко меняете зависимости, кеширование установки зависимостей будет бесполезным, так как каждый раз при изменении кода кеш будет invalidроваться на шаге COPY.
dockerfile
Изменение порядка инструкций может улучшить кеширование:
dockerfile
В этом случае, если меняется только код (не requirements.txt), кеш для RUN pip install будет сохранен.
Инструкции ADD и COPY используют хэш содержимого файлов для invalidation кеша.
Команда docker build по умолчанию использует кеш. Для отключения кеширования применяется флаг --no-cache.
bash