Как ускорить RUN npm в Dockerfile

У меня есть все эти материалы npm в моем Dockerfile, и создание моего образа Docker занимает много времени. Как я могу ускорить это и в идеале кэшировать результаты? Ничего не меняется, поэтому я не ожидал, что это займет так много времени (около 20 секунд).

FROM python:3.6-alpine

# python stuff
COPY requirements.txt /app/requirements.txt
RUN pip3 install --upgrade pip
RUN pip3 install -r /app/requirements.txt

# npm stuff
RUN apk add --update nodejs-npm
RUN npm init -y
RUN npm i webpack webpack-cli --save-dev
RUN npm i @babel/core babel-loader @babel/preset-env @babel/preset-react babel-plugin-transform-class-properties --save-dev
RUN npm i react react-dom prop-types --save
RUN npm i react-bootstrap bootstrap
RUN npm i weak-key --save

Я попробовал это решение с помощью COPY package.json, но babel и webpack, похоже, это не понравилось (и это не сработало).

ПРИМЕЧАНИЕ. Мне нужно использовать python:3.6-alpine, так как это существующее приложение Django, которое интегрирует React.js.

Есть ли у вас какие-либо команды COPY или другие команды, которые разбивают кэш докеров над командами RUN, которые вы показываете?

shadowspawn 01.03.2019 23:39

Вы пытались свести к минимуму использование RUN (каждый RUN создает новый временный контейнер, что делает его медленным)? Это вместо использования RUN для каждой команды, чтобы иметь несколько команд в одном и том же RUN - например, «RUN npm init -y & npm i webpack ... & ...". Вы по-прежнему можете разделить их на разные строки, используя «\» в конце каждой строки.

Yagel 02.03.2019 00:05

@shadowspawn - у меня есть COPY requirements.txt /app/requirements.txt над командами запуска. Почему это нарушает кеш докера?

Scott Skiles 04.03.2019 14:35

Кэш слоя Docker: см. «Использование кеша сборки» на docs.docker.com/develop/develop-images/….

shadowspawn 06.03.2019 23:51

Кэш уровня докера должен ускорить сборку, если ничего не изменилось, на том же компьютере, за исключением начального сканирования каталога. Для этого см. "Понимание контекста сборки" на docs.docker.com/develop/develop-images/….

shadowspawn 06.03.2019 23:54

Если вы использовали package.json (и package-lock.json), а не устанавливали зависимости вручную, вы могли бы использовать «npm ci», а не «npm install»: docs.npmjs.com/cli/ci.html

shadowspawn 07.03.2019 00:01

Примечание. @Yagel предложил самый простой вариант победы, объединив команды RUN в один RUN. Я иду шире, задаваясь вопросом, что на самом деле медленно и что вы могли бы сделать по-другому. :-)

shadowspawn 07.03.2019 00:04

@Yagel - Это немного помогло, но я думаю, мне нужно выяснить, как это кэшировать (или не сломать кеш). Я рассмотрю ваши рекомендации Shadowspawn

Scott Skiles 07.03.2019 21:41
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
2
8
1 556
0

Другие вопросы по теме