Как создать реагирующее приложение, используя напрямую только докер вместо хоста? - PullRequest
2 голосов
/ 19 апреля 2019

Я создаю новое приложение Reactjs с использованием Docker и хочу создать новый экземпляр без установки Node.js на хост-систему. Я видел много учебных пособий, но каждый раз первым шагом было установить Node.js на хост, приложение init, а затем настроить Docker. Проблема, с которой я столкнулся, заключалась в том, что официальные образы Docker для Node.je предназначены только для запуска приложения, а не для запуска как отдельный контейнер, поэтому я не могу использовать командную строку контейнера для начальной установки. Я собирался создать образ на основе любого дистрибутива Linux и установить Node.js самостоятельно, но с этим подходом я не могу использовать преимущества готовых официальных образов Node.js. Существует ли какой-либо вариант, как запустить приложение React с помощью Docker без установки Node.js в хост-систему? Спасибо

РЕДАКТИРОВАТЬ: на основе od @David Maze answer Я решил использовать docker-compose, просто смонтировать директорию проекта в контейнер и поместить command: ["sleep", "infinity"] в docker-compose файл. Поэтому мне не нужно было устанавливать Node.js на хост, и я могу управлять всем из командной строки контейнера, как обычно, в папке проекта. Я не решал ни одного общего глобального кэша, но я не совсем уверен, что это необходимо, если у меня будет больше версий зараженных узлов из-за конфликта npms разных версий. Может быть, я однажды пытаюсь смонтировать его как том в контейнеры из какого-то глобального места на хосте, но дисковое пространство не такая большая проблема ...

1 Ответ

1 голос
/ 19 апреля 2019

Вы должны быть в состоянии запустить что-то вроде:

sudo docker run \
  --rm \
  -it \
  -u$(id -u):$(id -g) \
  -w/ \
  -v"$PWD":/app \
  node:10 \
  npx create-react-app app

Вам придется повторять этот список параметров Docker каждый раз, когда вы хотите что-либо сделать, чтобы использовать версию Node, упакованную в Docker.

В конечном итоге эта последовательность вещей начинается в корневом каталоге контейнера (-w/) и использует create-реагировать-приложение для создания каталога app; опция -v поддерживает текущую директорию на хосте, а опция -u необходима для выравнивания разрешений файловой системы. Опции -it позволяют отвечать на интерактивные вопросы, а --rm вызывает очистку контейнера после себя.

Я подозреваю, что вам будет намного проще просто установить Node.

...