Задать вопрос
Lexxtor
@Lexxtor
PHP, Yii2, Android

Почему когда используют Docker для поднятия окружения, создают по контейнеру на каждый сервис а не всё в одном контейнере?

Http сервер в одном контейнере, БД в другом, язык программирования запускается в третьем.
Получается 3 виртуалки, так же накладных расходов больше, чем если бы всё в одном контейнере было.
Это наверное для последующего масштабирования так или не только или это тут не причем?
  • Вопрос задан
  • 2922 просмотра
Подписаться 6 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 9
neuotq
@neuotq
Прокрастинация
Вы совсем не понимаете Докер. У него основная концепция - один сервис/приложение - независимое окружение.
Для чего это сделано? Прежде всего безопасность и облегчение развертывания приложения.
Любой администратор линукс (ну и других) систем знает, какого это поддерживать сервер одновременно в актуальном состоянии и нужные версии ПО, библиотеки которых часто между собой конфликтуют, нужно проводить танцы в бубном для того чтобы нужные библиотеки были там те, в другом месте другие. Далее возня с правами, кто под кем запускается, что может, дыры в самом ПО, когда из-за этого будет угроза другим частям системы. Ну и простота настройки, одним одни параметры, другим другие.
Докер позволяет решить эти и кучу других проблем, каждый докер образ это грубо говоря максимально минимизированный образ ОС с установкой только необходим библиотек для конкретного сервиса (например mysql), запускается независимо. Таким образом у себя на сервисе вы имеете возможно спокойно, без затрат умственных ресурсов поднять кучу версий например mysql или php. Да и просто разные программы/сервисы которые могут с друг другом конфликтовать, теперь не будут мешать.
У вас есть свои заготовки образов, либо вы берете готовый рецепт и работаете.
Далее тестирование/разработка значительно упрощается, так как организовать условия максимально приближенные к боевым теперь легче.
Далее можно создавать проверенные системы развертывания, снова таки каждый образ под свои задачи и тд и тп.
Короче говоря да, у докера есть свои минусы, но одновременно это значительный прогресс и облегчения прежде всего работы которая касается улосноый Devops части в разработки ПО, значительно автоматизируются и упрощаются многие штуки.
Так же советую потратить время и посмотреть запись введение в Докер от Хекслет Кирилла Мокевнина. Там небольшие проблемы бывают со звуком, сам вебинар 2 часа, но советую потратить время, он именно рассказывает проблематику, которая привела людей к изобретению Докера и этой концепции.
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Веб-разработка
software engineer
В основном потому, что докером сильно злоупотребляют, используя его не по назначению.
Ответ написан
Комментировать
samizdam
@samizdam
На примере LAMP
1. Задел на горизонтальную масштабируемость. Нужно сделать несколько бэкендов, делаете два P. Оркестраторы это поддерживают. В одном контейнере не тривиальная задача.
2. Распределённость, изолированность. Общаясь только по сети, все сервисы могут быть запущены на разных нодах, в кластере, etc. Опять из коробки же есть разные плюшки для организации сетей. Сюда же отвязка от файловой системы одного хоста.
3. Один контейнер - один процесс. Докер, как супервизор, либо оркестраторы, берёт на себя часть проблем по перезапуску контейнера. в случае некоторых проблем. Если мухи и смузи в одном стакане (контейнере), самостоятельно придётся решать, к какому из процессов его привязать.

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

Так на что там расходы? Это же не гипервизор какой-то, простое разделение файлов и процессов по логическим сущностям. Chroot упаковали в красивую обертку и сделали подобие квот над ним.

Используют его хипстерские стартапы, у которых нет денег на админов и devops, а с линуксом работают программисты по шпаргалке вида «нажмите кнопку пуск для выключения компьютера», глубоко не погружаясь в детали. В солидных организациях используют нормальные средства виртуализации, средства типа докеров и джейлов в пром среду не запускают
Ответ написан
denistu10
@denistu10
Linux System Administrator/SRE Engineer
Потому что концепция Docker такова, один контейнер - один процесс.
Ответ написан
Sanes
@Sanes
От нечего делать. Особенно, когда банальный LAMP
Ответ написан
@ru-soft
Это делается для удобства использования контейнеров разными службами, своего рода черный ящик.... каждый контейнер делает свою работу и не обязательно что стороннему сервису понадобиться все варианты использования в одном флаконе....
Ответ написан
2ord
@2ord
Потому что Docker отвечает за виртуализацию на уровне процессов ОС, то есть отдельных приложений.
Для оркестрации контейнеров используют Kubernetes / Docker Swarm.
Ответ написан
sim3x
@sim3x
Почему когда используют Docker для поднятия окружения, создают по контейнеру на каждый сервис а не всё в одном контейнере?
Зависит от подхода к деплою

В случае "хостера" - клиента попросят засунуть все в один контейнер или платить за каждый контейнер отдельно

В случае "балансировки нагрузки" через копирование бекендов, помещение кода в контейнер - разумное решение.
В случае нагруженного проекта - СУБД лучше помещать отдельно прямо на железо без контейнеров и виртуализации

Также стоит заметить, что после установки докер не является гарантией безопасного исполнения произвольного кода юзера
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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