LINUX.ORG.RU
ФорумAdmin

а нужны ли мне эти ваши docker-контейнеры?

 , ,


4

2

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

Структура проекта следующая:

  • SQL-сервер
  • Web-backend на PHP
  • Web-frontend на Flutter
  • Сервис №1 на Java
  • Сервис №2 на Java

С самого начала проектирования я планировал завернуть это все в Docker, но у меня получается целая куча контейнеров:

  1. SQL-сервер
  2. Web-backend
  3. Web-frontend
  4. Внешний nginx, который проксирует запросы куда надо
  5. certbot для внешнего nginx, чтобы получать сертификаты
  6. Сервис №1 на Java
  7. Сервис №2 на Java

Docker принято использовать для упрощения развертывания, переноса, создания нужного окружения на машинах, где может не быть нужных пакетов. В моем случае, я вижу в использовании Docker только усложнение конфигурации и лишнюю точку отказа. Прав ли я? Может я просто устал и упускаю что-то? Как вы думаете: Docker - это серебряная пуля или стрельба из пушки по воробьям?

★★★★★

а нужны ли мне эти ваши docker-контейнеры?

если не понимаешь зачем, то нет

MaZy ★★★★★
()

Docker - это серебряная пуля или стрельба из пушки по воробьям?

Docker это инструмент. Контейнеров у тебя не куча, это всё, включая их сборку, можно удобно описать в docker-compose.

anonymous
()

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

PolarFox ★★★★★
()
Ответ на: комментарий от MaZy

Зачем я понимаю, но в данный момент вижу лишь усложнение, значительно превышающее пользу. Надеюсь, что тут начнется холивар, и в комментах увидеть здравые мысли

r0ck3r ★★★★★
() автор топика

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

pfg ★★★★★
()

4+5 можно заменить на traefik. на нем же можно построить некое подобие api gateway для зоопарка 2+6+7

aol ★★★★★
()

Если ты один работаешь, то делай как удобней. Если в команде, лучше докер. Одним скриптом развернуть все сервисы под любой ОС. Лично мне неприятно ставить всякие постгресы на свой компьютер. Контейнер удобней. Не захламляет систему. Поэтому я всегда пользуюсь докером.

Legioner ★★★★★
()
Ответ на: комментарий от pfg

Я тоже сначала подумывал сделать контейнеры более жирными. Даже рассматривал вариант сделать из всего один супер-контейнер, однако быстро передумал, так как появляются проблемы с UID:GID разных расшаренных каталогов, которые используются внутри контейнера разными сервисами с разными UID. К тому же, если шинковать не мелко, то усложняется сам контейнер и смысл в использовании Docker значительно снижается. Докер же как раз про то, что один сервис - один контейнер. Да, это все должно быть закинуто на VDS и, казалось бы, логично было бы использовать докер. Но для меня это, пока, ЕДИНСТВЕННЫЙ, аргумент в его пользу

r0ck3r ★★★★★
() автор топика
Ответ на: комментарий от Legioner

для разработки на своей уютной Fedora я вообще использую VirtualBox с нужным окружением под каждый проект. Вот на макбук с M1 приходится извращаться и использовать Docker, так как нормальных виртуалок я на него не нашел

r0ck3r ★★★★★
() автор топика
Ответ на: комментарий от aol

не слышал про него. 6 и 7 недоступны снаружи. С 6 работает только 2, а с 7 работает только 6. Наружу смотрит только 2 и 3

r0ck3r ★★★★★
() автор топика

docker-compose, если попроще. Если хипстер, то разворачивай в кластере kubernetes.

SQL-сервер

Если нагрузка на него большая, то лучше не пихать его в контейнер. Там проблемы с I/O могут быть.

ox55ff ★★★★★
()
Ответ на: комментарий от r0ck3r

для разработки на своей уютной Fedora я вообще использую VirtualBox с нужным окружением под каждый проект

Можно и так, конечно, хотя по-мне докер удобней такого подхода.

Вот на макбук с M1 приходится извращаться и использовать Docker, так как нормальных виртуалок я на него не нашел

Fusion, Parallels, UTM. qemu в конце концов?

Legioner ★★★★★
()
Ответ на: комментарий от ox55ff

Если нагрузка на него большая, то лучше не пихать его в контейнер. Там проблемы с I/O могут быть.

Какие проблемы? Маунтишь папку с хоста и всё.

Legioner ★★★★★
()

У тебя каждый сервис развёрнут ровно 1 раз и ты не собираешься развёртывать ещё уйму для покрытия других регионов, стейджинга, бетатестеров и прочих нужд? Тебе скорее всего не нужен докер.

x3al ★★★★★
()

Дошел до того шага, когда нужно начинать обмениваться данными между разными сервисами и вроде как нужно прикручивать Docker,

Нет, докер тут не нужен.

В моем случае, я вижу в использовании Docker только усложнение конфигурации и лишнюю точку отказа. Прав ли я?

Всё верно.

Как вы думаете: Docker - это серебряная пуля или стрельба из пушки по воробьям?

Докер это кривой костыль от начала до конца. Используется нубами для компенсации своего нубства. Разумеется, неудачно, но (у них) лучше чем ничего.

Просто не используй его нигде, если на то нет конкретного заказа от твоих клиентов. Докер-советчиков шли нафиг.

firkax ★★★★★
()
Ответ на: комментарий от Legioner

Одним скриптом развернуть все сервисы под любой ОС

Не скрипты для ОС а ОС для скриптов. А проблемы компа разработчика никак не должны отражаться на прод-архитектуре.

firkax ★★★★★
()
Ответ на: комментарий от r0ck3r

Вот на макбук с M1 приходится извращаться и использовать Docker, так как нормальных виртуалок я на него не нашел

Он и есть виртуалка везде кроме линукса. Только не пойму зачем тебе разворачивать окружение на больше чем одном устройстве. Есть рабочее место, там и сделай всё, остальной бардак следует устранить.

firkax ★★★★★
()
Ответ на: комментарий от aol

https://doc.traefik.io/traefik/

Какая большая концентрация всяких модных слов. Ещё и на go. Типичное поделие докер-модников, я бы держался подальше.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Не скрипты для ОС а ОС для скриптов.

Не понял.

А проблемы компа разработчика никак не должны отражаться на прод-архитектуре.

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

Legioner ★★★★★
()

Не нужны. Есть же NixOS

anonymous
()
Ответ на: комментарий от Legioner

Не понял.

Это значит что приложение не должно париться о поддержке разных ОС, у него должна быть спецификация того, что ему НУЖНО, и, условно говоря, ОС должна париться о том, чтобы этим требованиям соответствовать.

А ситуация когда скрипты занимаются вопросами всяких совместимостей приемлема разве что для шаред-хостингов, где ты вынужден «жрать что дают».

Если у разработчика, желающего локально развернуть приложение на своём компе, туда установлена несовместимая с приложением ОС - то это его проблемы, и они никак не повод добавлять в приложение поддержку того, чего не нужно в проде (любые ОС кроме штатной).

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от aol

Хм. Я правильно понял, что это HTTP-прокси с балансировкой нагрузки и встроенным клиентом Let’s Encrypt?

r0ck3r ★★★★★
() автор топика
Ответ на: комментарий от r0ck3r

Хм. Я правильно понял, что это HTTP-прокси с балансировкой нагрузки и встроенным клиентом Let’s Encrypt?

да, но не только http – есть поддержка чистых tcp/udp

MaZy ★★★★★
()
Ответ на: комментарий от r0ck3r

«один докер == один сервис» полностью согласен, но не «один докер == одна программа» это уже дрыгоножество и рукомашество.

имхо в контейнер стоит впихивать комплект сильно привязанных программ. тот же сертбот от https потребителя отрывать нет смысла. 2 с 3 думаю стоит впихнуть в один контейнер, они обычно повязаны меж собой как однояйцевые близнецы. плюс прям вот так и тянется рука их дублировать, а в нжинксе сразу таки предусмотреть режим балансира.
итэдэ итэпэ

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

pfg ★★★★★
()

Тема из серии «вот хочу Yesterday послушать, но говорят что попса что банально и слащаво, а может что упускаю, как-никак самая исполняемая песня! Напойте пожалуйста, особенно призываются в тред Рабиновичи!».

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

В моем случае, я вижу в использовании Docker только усложнение конфигурации и лишнюю точку отказа.

Нет

Прав ли я?

Нет

Может я просто устал и упускаю что-то?

Да

Как вы думаете: Docker - это серебряная пуля или стрельба из пушки по воробьям?

Да, но нет.

vvn_black ★★★★★
()
Ответ на: комментарий от pfg

тот же сертбот от https потребителя отрывать нет смысла.

я бы сказал, что нет смысла об этом вообще думать. Думать надо о своем приложении, которое кодишь. Раскидывать его на микросервисы или нет, резать по разным докерам или нет и тп. А думать о том, где будет ingress, а где let’s encrypt не надо, это НЕ относится к сервису.Есть готовые решения, если на собираем на коленке в тесте в докер-композ, то https://hub.docker.com/r/jwilder/nginx-proxy к нему же letsencrypt. все забирается с переменных в окружении и все, можно сосредоточится на основной задаче, а не заниматься херней. Ну и с кубами это будет настолько еще проще, что даже писать нечего об этом.

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

constin ★★★★
()
Последнее исправление: constin (всего исправлений: 1)
Ответ на: комментарий от constin

дыкыть теория теорией, а %тс% настало время думать об шинковке системы на сервисы, админ он, девопс али «ко всякой дырке затычка» смысла обсуждать нет. у %тс% вполне полноценный по параметрам запрос.

pfg ★★★★★
()
Ответ на: комментарий от firkax

Это значит что приложение не должно париться о поддержке разных ОС, у него должна быть спецификация того, что ему НУЖНО, и, условно говоря, ОС должна париться о том, чтобы этим требованиям соответствовать.

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

Если у разработчика, желающего локально развернуть приложение на своём компе, туда установлена несовместимая с приложением ОС - то это его проблемы, и они никак не повод добавлять в приложение поддержку того, чего не нужно в проде (любые ОС кроме штатной).

Нет, это не его проблемы. Это проблемы твои, как работодателя. Потому, что ты будешь платить за то время, которое он потратит, мудохаясь с тем, чтобы запустить всё это. И ты будешь платить +50% по рынку, чтобы от тебя не убегали на адекватные технологии.

Legioner ★★★★★
()
Ответ на: комментарий от pfg

ну я к тому, что ему не надо думать о базе, сертификатах и nginx. Ему надо думать о своем приложении, о том как доставлять трафик пусть думает клиент. Если открыть почти любой проект, то там всегда на выбор дают примеры, вот типа как это запустить в docker-compose, или вот вам helm. или просто вот докер запустите на коленке, чтобы потыкать палочкой.

Основная мысль, что есть готовые решения , надо их взять и все.

P.S. база данных как сервис тоже к приложению не относится. Надо давать возможность цеплять внешнюю базу данных. Так как выбор где и как онп бдет запущена должен быть на стороне заказщика/пользователя. Если это высоко нагруженная штука, то никто не будет запускать ее в докере, ее подключат сбоку. А если это недобаза, чтобы сохранить туда пару-тройку переменных, тогда можно и в докере.

constin ★★★★
()
Ответ на: комментарий от Legioner

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

Если его рассматривать как слой совместимости несовместимых компов с приложением - может быть (хотя есть и другие варианты). А вот на проде это как раз то, что я указал как лишнее: некая лишняя прослойка совместимости между приложением и ОС, вместо того чтобы совместимой была сама ОС сразу.

firkax ★★★★★
()

В моем случае, я вижу в использовании Docker только усложнение конфигурации

А как ты собрался это все запускать, руками по одному? Писать скрипт, который будет это все запускать?

Nervous ★★★★★
()
Ответ на: комментарий от Legioner

Нет, это не его проблемы. Это проблемы твои, как работодателя. Потому, что ты будешь платить за то время, которое он потратит, мудохаясь с тем, чтобы запустить всё это. И ты будешь платить +50% по рынку, чтобы от тебя не убегали на адекватные технологии.

Все так, подтверждаю

beka
()
Ответ на: комментарий от Nervous

да хоть systemd юниты, путей много

r0ck3r ★★★★★
() автор топика
Ответ на: комментарий от constin

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

Ок, предположим я отделил БД от докера и крутится она у меня локально. Есть ли адекватные способы прокинуть локальный порт в докер-контейнер? То о чем я читал - какая-то дичь: либо использовать net-host, но это размывает идею контейнеризации, либо проброс порта через SSH в контейнер, но это медленно и как-то нелепо

r0ck3r ★★★★★
() автор топика
Ответ на: комментарий от pfg

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

r0ck3r ★★★★★
() автор топика
Ответ на: комментарий от r0ck3r

предположим я отделил БД от докера и крутится она у меня локально. Есть ли адекватные способы прокинуть локальный порт в докер-контейнер? То о чем я читал - какая-то дичь: либо использовать net-host, но это размывает идею контейнеризации

А крутить БД на хосте и обращаться к ней из контейнера - это не дичь?

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 1)
Ответ на: комментарий от pfg

вот теперь подумываю, может и правда 3, 4, 5 - в один контейнер, 2, 6, 7 в другой и 1 в третий. Так, действительно, сложность значительно снизится

r0ck3r ★★★★★
() автор топика
Ответ на: комментарий от vvn_black

это дичь. Я писал про net-host, отвечая на это:

P.S. база данных как сервис тоже к приложению не относится. Надо давать возможность цеплять внешнюю базу данных. Так как выбор где и как онп бдет запущена должен быть на стороне заказщика/пользователя. Если это высоко нагруженная штука, то никто не будет запускать ее в докере, ее подключат сбоку. А если это недобаза, чтобы сохранить туда пару-тройку переменных, тогда можно и в докере.

r0ck3r ★★★★★
() автор топика
Ответ на: комментарий от r0ck3r

вот теперь подумываю, может и правда

Очень хорошо, тут выше всё расписали. У тебя есть приложения, каждому из этих приложений требуется своё окружение. Имеет смысл каждое приложение, требующее своё окружение, завернуть в контейнер.

Общий ресурс для всех приложений, в данном случае БД - тоже в свой контейнер.

При такой схеме тебе вообще без разницы, где физически находятся твои приложения-контейнеры и БД, можешь гибко рулить всей системой.

vvn_black ★★★★★
()
Ответ на: комментарий от r0ck3r

Надо давать возможность цеплять внешнюю базу данных.

Это не значит «обязательно» выносить БД на хост, это значит БД может быть где угодно и приложению нужен только DSN для подключения.

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 1)
Ответ на: комментарий от r0ck3r

Ок, предположим я отделил БД от докера и крутится она у меня локально. Есть ли адекватные способы прокинуть локальный порт в докер-контейнер? То о чем я читал - какая-то дичь: либо использовать net-host, но это размывает идею контейнеризации, либо проброс порта через SSH в контейнер, но это медленно и как-то нелепо

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

Если ты постгрес забиндишь на 127.0.0.1, тогда я не знаю, как это решить. Наверное --net=host поможет, но я не пробовал.

А так - ты в постгресе пишешь в конфиге, чтобы он биндился на 0.0.0.0, обязательно убеждаешься, что внешние соединения блокируются фаерволом. После этого ты в докер-композ добавляешь extra_hosts: [ "host-gateway:host-gateway" ] (не помню, как в командной строке это прописать, но можно и без композа, конечно, сделать) и прописываешь адрес БД как host-gateway. Это будет что–то вроде 172.17.0.1, т.е. это внутренний адрес хоста в сети для докер-контейнера. Ну и всё должно работать.

Но вообще я советую сначала попробовать запустить постгрес в докере. У нас на проде работает несколько баз в докере, проблем нет. Просто сделай volume в локальную папку. Тогда всё ещё проще будет.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 2)
Ответ на: комментарий от firkax

Просто не используй его нигде, если на то нет конкретного заказа от твоих клиентов. Докер-советчиков шли нафиг.

У тебя есть опыт разработки web-сервисов? Хотя не важно. Как без докера ты сможешь гарантировать, что у тебя тестовое окружение соответствует prod'у? Или как ты изолировать будешь сервисы?

adn ★★★★
()

Docker принято использовать для упрощения развертывания, переноса, создания нужного окружения на машинах, где может не быть нужных пакетов. В моем случае, я вижу в использовании Docker только усложнение конфигурации и лишнюю точку отказа. Прав ли я?

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

adn ★★★★
()
Ответ на: комментарий от r0ck3r

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

и тебе не надо чтобы это работало 24/7?

adn ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.