Запуск «npm ci» при создании образа docker выполняется намного медленнее

#node.js #docker #docker-for-windows #docker-desktop #npm-ci

#node.js #docker #docker для Windows #docker-рабочий стол #npm-ci

Вопрос:

Я попытался запустить npm ci команду, используя одни и те же файлы package.json и package-lock.json в трех разных средах:

  • хост-машина docker — для завершения требуется ~ 27 секунд
  • внутри контейнера docker — для завершения требуется ~ 32 секунды
  • во время сборки образа docker — для завершения требуется ~ 163 секунды

Интересно, почему установка пакетов при сборке образа занимает гораздо больше времени. В чем разница между выполнением команд при сборке образа и при выполнении команд внутри контейнера вручную? Возможно, это связано с объемом ресурсов (процессор, память), используемых docker при сборке образа?

Я использую один и тот же узел и версию npm во всех трех средах. Docker host — это виртуальная машина Windows Server 2019, которая имеет 2 виртуальных процессора и 2 ГБ памяти. Версия Docker 18.09.2 .

Комментарии:

1. «внутри контейнера docker»: был ли node_modules каталог расположен на томе docker или он находился в самой файловой системе контейнера?

2. @Thomasleveil это в файловой системе контейнера. Я попытался воспроизвести поведение при сборке образа. Если я правильно понимаю, запуск команд внутри контейнера, а затем вызов docker commit не сильно отличается от процесса сборки образа (учитывая отсутствие кэша изображений). Пожалуйста, поправьте меня, если я ошибаюсь. Моя другая теория заключается в том, что он выполняется так медленно из-за процесса кэширования изображения. Если это так, я бы хотел, чтобы кто-нибудь подтвердил это.

3. имейте в виду, что в образе, созданном docker commit с помощью , не будет файлов, которые расположены в томе docker в контейнере. Известно, что запись файлов в файловую систему docker выполняется медленнее, чем запись файлов на томе docker, отсюда и мой предыдущий вопрос. Процессор и память: нет, AFAIK, при сборке образа ограничений нет. В контейнере это может быть быстрее, если вы запускаете npm ci несколько раз из-за кэширования модулей npm