172 похожих чатов

Друзья, кто-нибудь работал с контейниризацией node-js микросервисов? Необходимо собрать несколько

сервисов из одного репозитория, зависимости у них прописаны в одном package.json и соответсвенно каждому контейнеру нужны свои зависимости, как их передать в контейнер? Есть вариант хранить node_modules в общем томе и прокидывать через volume либо для каждого контейнера устанавливать свои зависимости из разных package.json, но техлид эти варианты отмёл. Общаются сервисы по очередям, через воркеров bullMQ, кеширует redis. Хз, что он хочет ещё. Какие вообще best practice существуют по архитектуре микросервисов?

"один репозиторий на все 3 приложения (http server + 2 ms)
- 1 package.json
- три разных Dockerfile, для каждого мс
- 1 общий docker-compose.yml
- volumes - нет"
такие вводные

37 ответов

3 просмотра

Все зависимости должны быть в образе, какие еще тома?

Ну вообще этим должен заниматься архитектор, все продумать и приложение писать изначально заточенное в микросервисы. Вам монолит распилить надо? Архитектуру кто делает?

Бест практикс - все зависимости внутри имейджа никаких внешних подключений

Shved
Ну вообще этим должен заниматься архитектор, все п...

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

Dmitriy M.
Причем тут архитектура. Им я так понял просто надо...

Я понял что нужно распилить на микросервисы монолит.... Тз хромает

разные package.json и package-lock.json/yarn.lock для каждого приложения конечно. Зачем раздувать образы, и тащить одни и те же node_modules в каждый сервис, когда он все из них не будет использовать? - это надо задать вопрос тех. лиду, я думаю кроме ответа "мне удобней править один файл чем несколько" он не сможет ничего ответить, а это не повод раздувать образы, укудшать скорость деплоймента, хранить больше данных в registry чем надо.

Dmitry Sergeev 🇺🇦
разные package.json и package-lock.json/yarn.lock ...

Мой вариает с одним имейджем потанциально меньше места занимать в сумме будет

Aleksey Lazarev
Мой вариает с одним имейджем потанциально меньше м...

на мой вкус это закрытие орагнизационной проблемы техническими методами. Как-то костыльно

Sergei-Bobrov Автор вопроса
Sergei Bobrov
Один имэйдж на все 3 сервиса?

Да, просто запускаете разное.

Sergei-Bobrov Автор вопроса
Shved
Да, просто запускаете разное.

Так не прокатит, тк смысл в том, чтобы была возможность при необходимости поднимать сервисы по отдельности в зависимости от нагрузки

Sergei Bobrov
Так не прокатит, тк смысл в том, чтобы была возмож...

Тогда 3 файла пекеджа. Либо в печку Лида.

Sergei Bobrov
Так не прокатит, тк смысл в том, чтобы была возмож...

общий образ даст такую возможность. Через разные entypoint легко разруливается, или через один общий но с разными аргументами

Sergei-Bobrov Автор вопроса
Dmitry Sergeev 🇺🇦
разные package.json и package-lock.json/yarn.lock ...

На самом деле частый паттерн в мире джс почему-то, целые менеджеры монореп пишут, чтобы собирать сервисы с общим пакаджем но в каждом билде только нужные пакеты

Sergei Bobrov
объясните пожалуйста подробнее про entripint?

ну тебе предложили делать один образ на все приложения. Далее стоит задача запустить их в контейнере из этого образа. Ты можешь, запускать нужное тебе приложение указав нужный entrypoint. Например: 1) /opt/app1/server.js - запуск app1 (в терминах куба: command ["node", "/opt/app1/server.js"]) 2) /opt/app2/server.js - запуск app2 (в терминах куба: command ["node", "/opt/app2/server.js"]) Или ты можешь написать entypoint который запускает нужное тебе приложения исходя из аргументов в Dockerfile: ENTRYPOINT ["/entrypoint.sh"] 1) /entrypoint.sh app1 - запуск app1 ( в терминах куба: args: ["app1"] ) 2) /entrypoint.sh app2 - запуск app2 ( в терминах куба: args: ["app2"] ) entrypoint.sh в зависимости от аргумента запускает нужное приложение

Sergei-Bobrov Автор вопроса
Vladimir Chernyshev
На самом деле частый паттерн в мире джс почему-то,...

я договорился с лидом об отказе от lerna, иначе в образ пришлось бы запекать много всего. То есть проблема организационная. Если бы не смог договориться, то на любые жалобы про размер образа и почему он долго качается, отсылал к тому что это lerna и сами так захотели

Dmitry Sergeev 🇺🇦
ну тебе предложили делать один образ на все прилож...

Через sh норм идея... Но лучше 3 разных образа:)

Shved
Через sh норм идея... Но лучше 3 разных образа:)

да, мы так и делаем. Разные образы, разные package.json

Sergei-Bobrov Автор вопроса
Dmitry Sergeev 🇺🇦
ну тебе предложили делать один образ на все прилож...

это у нас один докерфайл на весь реп и в одном контйнере все 3 сервиса крутятся?

Vladimir Chernyshev
Там как раз не пришлось бы

я деталей не помню про lerna, но помню было что-то связано со сборками

Sergei Bobrov
это у нас один докерфайл на весь реп и в одном кон...

1 образ 3 контейнера же, а что где запускать ты разруливаешь через аргументы к энтрипоинту

Sergei-Bobrov Автор вопроса
Shved
1 образ 3 контейнера же, а что где запускать ты ра...

звучит слишком по девопсовски для просто разраба)

Sergei Bobrov
звучит слишком по девопсовски для просто разраба)

Эм...... Ну У вас выбора особо нет. Выше весь дискас был уже... Дык повесьте задачу на девопс, или У вас нет?

Sergei-Bobrov Автор вопроса
Shved
Эм...... Ну У вас выбора особо нет. Выше весь диск...

ок, это я понял уже. А через bind mount можно решить мою задачу? нагуглил такой вариант

Sergei Bobrov
звучит слишком по девопсовски для просто разраба)

Возьмите инструкцию от Дмитрия выше, почитайте, поищите примеры как люди делают. На самом деле так часто делают.... Точно найдете примеры, но он написал чуть ли не под ключ вам всё.

Shved
Возьмите инструкцию от Дмитрия выше, почитайте, по...

На каком варианте в итоге остановиличь? Один докерфайл+ентрипоин?

Aleksey Lazarev
На каком варианте в итоге остановиличь? Один докер...

Я так понимаю что да....вариантов предложили минимум 2

Aleksey Lazarev
Ты прям так любишь до мелочей жевать)

Похвально же! Спасибо мил человек надо говорить:)

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Привет, запускаю werf в dind в k8s, получаю ошибку на этапе build/beforeSetup: /.werf/stapel/embedded/bin/bash: /.werf/scripts/5898bdfe5214357d3706b879cc8d3d78460fb379607cbd...
florius0
7
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
22
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Ошибка: segmentation fault (core dumped) Код: pastebin.com/BEsNNSSV Сообщение от компилятора: отсутствует ОС: Arch Linux Ядро: x86_64 Linux 6.9.7-arch1-1 Процессор: Intel Cele...
sec
4
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
Карта сайта