Выбор ответа Middle Docker для разработчика спрашивают часто обновлено
Кеш слоёв и порядок COPY
Вопрос
Каждая правка любого файла в проекте вызывает долгий npm ci при сборке. Что исправить?
FROM node:22-alpine
WORKDIR /app
COPY . .
RUN npm ci
RUN npm run build
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Сначала скопировать манифесты и npm ci, а COPY . . после. Docker берёт слой из кеша, только если не изменились инструкция и её входные файлы.
Варианты ответа
- Сначала скопировать манифесты и
npm ci, аCOPY . .послеправильный ответ - Заменить
npm ciнаnpm install, он использует кеш - Добавить флаг
--no-cacheк сборке, чтобы не путать слои - Объединить все RUN в одну строку через
&&
Разбор
Docker берёт слой из кеша, только если не изменились инструкция и её входные файлы. COPY . . меняется при любой правке и инвалидирует все слои после него, включая npm ci. Если сначала скопировать только манифесты, слой с зависимостями пересобирается лишь при их изменении.
npm installне решает проблему кеша и делает сборку менее воспроизводимой.--no-cacheотключает кеш совсем, станет ещё медленнее.- Склейка RUN уменьшит число слоёв, но
npm ciвсё равно будет идти послеCOPY . ..
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.