Последовательность сборки Dockerfile

Пытался разобраться с docker compose, выполнял работу с документации docker

FROM node:21

WORKDIR /usr/src/app

COPY package.json package-lock.json ./
RUN npm ci
COPY ./server.js ./

CMD ["npm","start"]

И возник вопрос почему сначала выполняется копирование COPY package.json package-lock.json ./ а не копирование сразу всех файлов COPY ./ ./

Я буду благодарен за ссылки на другие подобные вопросы, документацию и прочие источники.


Ответы (1 шт):

Автор решения: Evgenii Evstafev

Если кратко, то копирование сначала package.json и package-lock.json, а уже потом остальных файлов делается для эффективного использования кэша Docker. Команда RUN npm ci - ресурсоёмкая, и если package.json не меняется, то Docker использует закэшированный слой и не выполняет установку зависимостей заново. Если бы сразу копировались все файлы, любые изменения в коде приводили бы к пересборке этого слоя.

→ Ссылка