powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Разработка в Docker
25 сообщений из 48, страница 1 из 2
Разработка в Docker
    #40111400
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот встал вопрос.
Всегда запускал проект на хосте и обходился отдельным профилем для локального запуска (нежели на проде). Например вместо posgres - h2 и т.п.
При этом на PHP давно уже имею практику разработки в контейнере докера (туда пробрасывается код IDE и все без проблем работает, ну там проще - язык скриптовый). Решил эту практику попробовать на Kotlin + Spring Boot и всё оказалось не так-то просто.

Есть некоторые манулы в интернете по настройке работы IDEA с окружением внутри контейнера докера, но ничего из этого нормально не работает. Один из вариантов это просто включение удаленной отладки в JVM в контейнере, ну такое себе на самом деле. Каждый раз пересобирать контейнер не удобно, да и IDE не трекает его состояние, надо в отдельное меню лазить.

Стало интересно, на сколько вообще распространенная практика. Например хочу чтобы проект работал с настоящей PG, разворачивать на хосте?
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111411
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett
Стало интересно, на сколько вообще распространенная практика. Например хочу чтобы проект работал с настоящей PG, разворачивать на хосте?
Не понял, а что мешает запускать службы в докере, а IDE и код на рабочей машине? IDE и обвесу находиться внутри ОДНОГО образа вовсе не обязательно
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111424
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,
В чем разница прода? Если постгри, то сейчас вполне можно его ставить везде где надо и не надо.
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111440
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
Hett
Стало интересно, на сколько вообще распространенная практика. Например хочу чтобы проект работал с настоящей PG, разворачивать на хосте?
Не понял, а что мешает запускать службы в докере, а IDE и код на рабочей машине? IDE и обвесу находиться внутри ОДНОГО образа вовсе не обязательно


Можно. Но нужно тогда заморачиваться ручной настройкой сети. Хост не видит контейнеры по именам да и доступа к ним не имеет если порты не пробрасывать.
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111444
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Hett,
В чем разница прода? Если постгри, то сейчас вполне можно его ставить везде где надо и не надо.


Не удобно, особенно в случае микросервисной архитектуры. Все разработчики должны развернуть пачку сервисов, это может занять не один день, особенно если в них не ориентироваться. В этом плане контейнеризация удобнее. И если понадобилось работать над каким-то сервисом, то удобнее это делать в докере, чтобы меньше заниматься перенастройками всего окружения.
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111452
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,
Если микросервисы то есть менеджеры для работы с ними. Причем пачками.
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111453
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5ый топик с проблемами микросервисов...
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111470
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Hett,
Если микросервисы то есть менеджеры для работы с ними. Причем пачками.


Что за менеджеры?
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111476
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,
Ох, это объемная тема.
Kubernetes...
https://habr.com/ru/post/544714/
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111498
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett

Есть некоторые манулы в интернете по настройке работы IDEA с окружением внутри контейнера докера, но ничего из этого нормально не работает. Один из вариантов это просто включение удаленной отладки в JVM в контейнере, ну такое себе на самом деле. Каждый раз пересобирать контейнер не удобно, да и IDE не трекает его состояние, надо в отдельное меню лазить.

Докер для разработки ничего толком не дает. Тоесть разработчику должно быть глубоко наплевать на
докерность или не-докерность системы. Он ведь учился на разработку Java/JVM. И собеседовали его по
этому-же профилю. Поэтому и отладку можно делать локально.

Нет коечно могут спрашивать про техники виртуализации но КМК это ближе к собесу на девопса.
Тоесть это такие себе вопросы... из серии "неплохо было-бы знать" но не критично.

Ситуации когда нужно именно отладчиком прицепится на прод - это архи-критичные ситуации.
И часто это рассматрвиается как security-инцедент.

Во многих банках PROD например отделен от окружения Dev и по дизайну не предполагается вообще
никакого доступа кроме логов которые можно просто в режиме R/O просмотреть или заказать.

А если нужно поднимать Postgres+Application то можно попробовать docker-compose. И если уж не хватит
возможностей - то тогда посмотреть в Кубер и прочие штуки.
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111512
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Hett,
Ох, это объемная тема.
Kubernetes...
https://habr.com/ru/post/544714/


Да знаю я про кубик. Как это на мой вопрос отвечает? В нем все те же образы крутятся. И сервис локатор внутреннюю сеть использует и все те же проблемы что с docker-compose при попытке вынести один сервис на хост-машину.
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111522
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Ситуации когда нужно именно отладчиком прицепится на прод - это архи-критичные ситуации.
И часто это рассматрвиается как security-инцедент.

Согласен

По хорошему, стандарты Oracle требуют минимимум 3-х ОДИНАКОВЫХ конфигураций.

DEV - TEST - PROD.

И если DEV ище может отличаться по конфигурации железа/баз/софта отличаться от PROD, то TEST, по логике, должен быть точной копией один в один. Одинаковое железо, одинаковые базы и так далее.

На практике, часто на TEST кладут больший или меньший болт, из-за сложности и стоимости точно точно такойже конфигурации как и на PROD. В результате, в относительно редких случаях, кроме как на самом PROD проблему и не воспроизвести (например "особенности" работы NIO на много-много-ядерном сервере с NUMA)

Самому приходилось отлаживать на PROD и аж давали рутовые пароли. При этом подвисание машины и сотни тысячь (!) клиентов по всему миру тупо подвисли бы.

PROD находился на Лондонской биржы и для него была куплена подписка на данные с биржи (все настроено). Можно или нет было получать купленные данные с другого компа (полноценно запустить приложение/сервис) - то вообще никто не знал ))). Ну и проблема на другой конфигурации железа просто не воспроизводилась.

mayton

Во многих банках PROD например отделен от окружения Dev и по дизайну не предполагается вообще
никакого доступа кроме логов которые можно просто в режиме R/O просмотреть или заказать.

Тогда в контуре банка должен быть TEST один в один с PROD конфигурации.
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111523
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблему ТС и понимаю и не понимаю одновременно

1. Чем доккер настолько сильно отличается от отдельной машины-сервера?
2. Понятно, что для удаленной отладки (как и для удаленного доступа к PostgreSQL и прочим сервисам) нужно пробрасывать порты
3. В связи с пунктом 2, не очень понятна, чем удаленная разработка/отладка в докере будет сильно проще нормальной "настройкой сети", что бы компьютеры разработчика имели доступ к сервисам из полноценного TEST окружения (базы и прочее).
4. Зачем пересобирать докер контейнер при деплое - так же не понятно. Деплой при DEV это все же в большей части просто файлы .class, .jar, .war. Зачем для компиляции деплоя пересобирать докер и чем Java принципиально отличается от PHP - мне не понятно
etc. etc...

В общем:

5. Нормально настраивать сеть (резолвинг имен, проброс портов) все равно придется и в том и в другом случае.
6. Нормально настраивать DEV - TEST - PROD окружения желательно все равно.

p.s. в сообщении выше, как раз отлаживался/профелировал в докере. Но докер или нет меня мало интересовало. Мне просто дали команды на вход в нужную машину-образ, каким образом подключаться к порту для удаленной отладки, куда выкладывать подправленный мною Jar'ник и как перезапускать нужный мне сервис. Все. Докер или нет, с точки зрения разработки/отладки/профилирования, в целом-то пофиг.
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111646
Hett , я как-то пробовал так же просто с PG работать из контейнера. В итоге плюнул, правда больше из-за того что Docker под Mac очень тормозит. Но в общем и целом установить раз все это дело локально не сложно и работать так тоже проще.

По поводу огромного кол-ва микросервисов, я бы предложил такие решения:
1. Использовать моки. У меня к примеру в проекте около 10 интеграций, на все их написаны моки. И по сути все моки поднимаются как одно маленькое приложение. Все работает быстро и позволяет мне сконцентрироваться на своем проекте.
2. Плюс нужно какое-то окружение где задеплоены все сервисы и мы могли бы с локальных машин подключать их. В таком случае локально не надо будет разворачивать ничего кроме своего. Архитектура конечно должна поддерживать такое. Это все к тому же обсуждению pull vs push архитектуры - pull здесь сильно помогает.
3. И если все-таки понадобилось развернуть что-то локально - то что надо, то и разворачиваем. Т.е. к примеру используем N сервисов удаленных и 1 локальный.

Ну а если все-таки много сервисов нужно запустить (это должно быть редкостью), то да - тут Docker лучше всего подойдет. Но нам же разрабатывать прям в контейнере все равно не надо? Наш сервис на хосте может работать и общаться с теми кто в контейнерах. Т.е.:
HettМожно. Но нужно тогда заморачиваться ручной настройкой сети. Хост не видит контейнеры по именам да и доступа к ним не имеет если порты не пробрасывать.Да, это обязательно нужно сделать и это очень быстро оправдает себя.
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111698
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev,

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

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

На счет моков - их тоже поддерживать надо, не разу не пробовал такое, но имхо там больше шансов, что локально всё ок, а в реальной среде - нет.
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111703
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,

чет мне показалось что вы не совсем понимаете как оно работает... из контейнеров доступ к хосту есть по адресу host.docker.internal (хз что там в wsl2, но в docker desktop есть), хотите чтобы и в обратную сторону работало - ставьте linux, запускайте идею с nsenter.
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111720
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
Hett,

чет мне показалось что вы не совсем понимаете как оно работает... из контейнеров доступ к хосту есть по адресу host.docker.internal (хз что там в wsl2, но в docker desktop есть), хотите чтобы и в обратную сторону работало - ставьте linux, запускайте идею с nsenter.


у господ mac.
А так у меня нормально так и не завелось с host.docker.internal (линукс). Проверил сейчас еще раз ничего не поменялось.

насколько я помню это host.docker.internal для винды и под мак, под линукс ничего еще нет.

по итогу сейчас все в наружу порты мапятся. (если больше одного проекта в работе то геморно). в каждый проект по docker-compose
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111722
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если с postgres ну еще частенько можно не выходя из IDE открыть терминальную сессию прям в IntelljIDeaa а там дальше по накатанной
psql -U -W
:)
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111725
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming
насколько я помню это host.docker.internal для винды и под мак, под линукс ничего еще нет
так под линукс и не нужно ничего - там же из коробки сетевая связность между хостом и контейнерами
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111734
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
Hett,

чет мне показалось что вы не совсем понимаете как оно работает... из контейнеров доступ к хосту есть по адресу host.docker.internal (хз что там в wsl2, но в docker desktop есть), хотите чтобы и в обратную сторону работало - ставьте linux, запускайте идею с nsenter.



Если сервис локатора на уровне приложений нет, то это все равно гемор. Вот развернул с десяток серивисов и нам нужно на одном поработать. Для этого нужно всем остальным сервисам как-то сказать, что один сервис теперь имеет другой хост - `host.docker.internal`. Понятно, что это сведется к обновлению конфигов и перезапуску сервисов. А если два сервиса сразу дорабатываем, то еще и конфликт портов будет, но опять же все решаемо, я уже это все проходил. В моем идеальном мире IDE должна уметь запускать приложение в контейнере с сконфигурированной средой (кстати IDEA умеет, но пока не понял, умеет ли все, что я хочу или нет, пока не разобрался до конца)
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111741
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett
PetroNotC Sharp
Hett,
Ох, это объемная тема.
Kubernetes...
https://habr.com/ru/post/544714/


Да знаю я про кубик. Как это на мой вопрос отвечает? В нем все те же образы крутятся. И сервис локатор внутреннюю сеть использует и все те же проблемы что с docker-compose при попытке вынести один сервис на хост-машину.
хммм...
Kubernetes поддерживает DNS.
Значит в файле лежит перечень всех сервисов по их именам.
Значит у тебя что на проде, что на стенде дома будет автоматический поиск сервисов.
Не?
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111760
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Hett
пропущено...


Да знаю я про кубик. Как это на мой вопрос отвечает? В нем все те же образы крутятся. И сервис локатор внутреннюю сеть использует и все те же проблемы что с docker-compose при попытке вынести один сервис на хост-машину.
хммм...
Kubernetes поддерживает DNS.
Значит в файле лежит перечень всех сервисов по их именам.
Значит у тебя что на проде, что на стенде дома будет автоматический поиск сервисов.
Не?


В том то и дело, что будет, пока мы что-то из контейнеров на хост не выносим.
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111765
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На текущий момент картина такая (и не факт что правильная):
- В проде все крутится в кубике, образы собираются отдельными Dockerfile, которые лежат в отдельном репозитории с чартами, триггерятся при обновлении мастера и деплоятся в куб в прод.
- Локально разработчики поднимают каждый сервис при помощи docker-compose и сопутствующего в репозитории сервиса Dockerfile_dev. Большинство разработчиков могут даже не разбираться в тонкостях конкретного сервиса, они просто делают `docker-compose up -d` и имеют работающий сервер со своей базой данных и прочими сопутствующими сервисами. Это могут быть фронтэндеры, которым нужна работающая инфраструктура для написания фронта. А могут быть и разработчики какого-то отдельного сервиса, над которым им нужно работать и тут то и начинаются "пляски с бубном".
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111767
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Больше проблем у тех, кто работает над отдельными сервисами, когда их выносишь на хост, вся инфраструктура ломается и надо лазить по сервисам и "переводить стрелки", что какой-то конкретный сервис больше не в инфраструктуре докера начинает работать, а на хосте.
...
Рейтинг: 0 / 0
Разработка в Docker
    #40111771
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,
Не очень понял.
Но на хост выносит разраб то, что он знает досконально. Остальное черный ящик.
Вот один сервис он и интегрирует (стрелки переводит).
Напиши пример.
...
Рейтинг: 0 / 0
25 сообщений из 48, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Разработка в Docker
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]