Какова цель контейнера node-modules в wolkenkit? - PullRequest
2 голосов
/ 05 апреля 2019

Этот контейнер создается при развертывании приложения.

Похоже, его целью является разделение зависимостей между модулями.

Похоже, он запускается как контейнер, но, очевидно, ничего не работает, немного похоже на контейнер инициализации.

Консоль сообщает, что запускает / останавливает этот компонент при использовании соответствующих команд wolkenkit start и wolkenkit stop.

При запуске:

wolkenkit start

При выключении:

wolkenkit stop

Когда вы docker ps, этот контейнер не может быть найден:

docker ps

Может кто-нибудь объяснить эти компоненты?

1 Ответ

2 голосов
/ 05 апреля 2019

При запуске приложения wolkenkit приложение упаковывается в несколько контейнеров Docker, после чего эти контейнеры запускаются вместе с несколькими другими контейнерами, которые предоставляют инфраструктуру, такую ​​как базы данных, очередь сообщений., ...

Причина, по которой приложение разбивается на несколько контейнеров Docker, заключается в том, что wolkenkit основывается на шаблоне CQRS, который предлагает отделить сторону чтения приложения от стороны записи приложения, и, следовательно, существует однаКонтейнер для стороны чтения и один для стороны записи (на самом деле их несколько, но вы получите представление).

Теперь, поскольку вы можете разрабатывать в операционной системе, отличной от Linux, приложение wolkenkitможет работать под другой операционной системой, чем когда вы ее разрабатываете, так как в Docker это всегда Linux.Это означает, что команда start не может просто скопировать папку node_modules в контейнеры, поскольку они могут содержать двоичные модули, которые затем несовместимы (представьте, что вы устанавливаете Windows на хосте, но работаете в Linux в Docker).

Чтобы избежать проблем, wolkenkit запускает npm install при запуске приложения внутри контейнеров.Проблема сейчас в том, что если бы wolkenkit делал это в каждом отдельном контейнере, запуск был бы очень медленным (в любом случае, это не самая быстрая вещь на земле, из-за того, что весь Docker строил и запускал, что происходит под капотом).Поэтому wolkenkit пытается максимально оптимизировать это.

Одна из концепций здесь - запускать npm install только один раз, внутри собственного контейнера.Это контейнер node-modules, с которым вы столкнулись.Этот контейнер затем связывается как том со всеми контейнерами, которые содержат код приложения.Таким образом, вам нужно будет запустить npm install только один раз, но несколько контейнеров могут использовать результат этой команды.

Поскольку этот контейнер теперь содержит данные, но не код, он должен быть только там, он не 'на самом деле делай что угодно.Вот почему он создается, но не запускается.

Надеюсь, это немного прояснит ситуацию, и я смог ответить на ваш вопрос: -)

PS:Пожалуйста, обратите внимание, что я являюсь одним из разработчиков ядра wolkenkit, поэтому ответьте на мой вопрос немного.

...