Почему в Docker копируется сначало package*.json, а затем все?
Объясните или подскажите где почитать почему в Dickerfile COPY выполняется 2 раза?
# Установка зависимостей
COPY package*.json ./ <-- Сначало это.
RUN npm install
# Для использования в продакшне
# RUN npm install --production
# Копирование файлов проекта и сборка проекта
COPY . . <-- И вот это
Почему изначально например все не скопировать?
В поисковике писал по разному но не нашел конкретного ответа.
Скорее всего, это сделано для того, чтобы не пересобирать слои, а использовать закэшированные в случае, когда зависимости не поменялись между сборками. Это существенно ускоряет процесс.
Спасибо за свое пояснение.
Самое интересное что в официальной документации, где разбирается структура Docker фаил, нету пояснения, как и во всех уроках и стороних мануалах)
Lexa_Shepa, да, конкретно этого примера, кажется, в бест практиксах нету - но в целом в документации Докера всё довольно подробно описано, надо только походить по ссылкам.
При сборке каждая команда создает новый слой, который включает в себя только те изменения, которые были выполнены этой командой.
Слои кэшируются и при изменении слоя пересоздаются только нижележащие слои, следовательно в таком формате больше вероятность переиспользования этих слоев в других образах, быстрее сборка.