Кеширование в Docker при сборке образа происходит на уровне слоев. Каждый слой представляет собой результат выполнения одной инструкции в Dockerfile. Docker engine следит за изменениями в инструкциях и файлах. Если инструкция и связанные с ней файлы не изменились с предыдущей сборки, Docker использует кешированный слой.
Принцип работы:
Dockerfile сверху вниз.RUN, COPY, ADD и т.д.) обрабатывается как отдельный шаг, создавая новый слой.Основные инструкции, влияющие на кеширование:
FROM: Изменение базового образа инвалидирует кеш для всех последующих инструкций.RUN: Любое изменение в команде RUN инвалидирует кеш для этого и всех последующих слоев.COPY, ADD: Кеш инвалидируется, если изменилось содержимое копируемых/добавляемых файлов. Порядок файлов также важен.ENV, ARG, LABEL: Изменение этих инструкций, как правило, не приводит к инвалидации кеша для последующих RUN, COPY, ADD, если они не зависят от этих переменных.Стратегии оптимизации кеширования:
COPY ./src /app), ниже в Dockerfile.RUN в одну, используя &&, чтобы уменьшить количество слоев и потенциально улучшить кеширование (но будьте осторожны, так как изменение любой части объединенной команды инвалидирует весь слой)..dockerignore для исключения файлов, которые не должны попасть в контекст сборки, что помогает предотвратить ненужную инвалидацию кеша при изменении этих файлов.Пример оптимизации с RUN:
dockerfile
Команда для сборки, использующая кеш:
bash
По умолчанию docker build использует кеш.
Отключение кеширования:
bash
Отключение кеширования заставляет Docker заново выполнять все инструкции. Используется, например, при отладке или если есть подозрения, что кеш устарел.