#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