Что такое слои Docker-образа и как работает кеширование при сборке?
Основы Docker
Образ — это стек read-only слоёв, примерно по одному на инструкцию Dockerfile; при сборке Docker переиспользует закешированные слои, пока не изменилась инструкция или её входные данные.
Как работает кеш
- Docker идёт по Dockerfile сверху вниз: если инструкция и контекст не менялись, слой берётся из кеша (пометка
CACHED). - Первое же изменение инвалидирует кеш этой и всех последующих инструкций.
- Сброс кеша:
docker build --no-cacheцеликом или точечно через build-аргументы.
Главное правило Dockerfile
Сначала редко меняющееся, потом часто меняющееся:
COPY package*.json ./
RUN npm ci # закешируется, пока не тронут package.json
COPY . . # код меняется чаще всего — кладём в конецЗачем это важно
- Правильный порядок сокращает сборку с минут до секунд.
- Слои разделяются между образами: десять образов на базе
node:20хранят базовые слои один раз.
Коротко для собеседования
Каждая инструкция Dockerfile даёт слой, и Docker берёт его из кеша, пока не изменились сама инструкция и её файлы; первое же изменение пересобирает всё ниже. Поэтому зависимости ставят до копирования исходников — тогда правка кода не запускает npm ci заново.