Lexxtor
@Lexxtor
PHP, Yii2, Android

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

Http сервер в одном контейнере, БД в другом, язык программирования запускается в третьем.
Получается 3 виртуалки, так же накладных расходов больше, чем если бы всё в одном контейнере было.
Это наверное для последующего масштабирования так или не только или это тут не причем?
  • Вопрос задан
  • 2903 просмотра
Пригласить эксперта
Ответы на вопрос 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
Это делается для удобства использования контейнеров разными службами, своего рода черный ящик.... каждый контейнер делает свою работу и не обязательно что стороннему сервису понадобиться все варианты использования в одном флаконе....
Ответ написан
Потому что Docker отвечает за виртуализацию на уровне процессов ОС, то есть отдельных приложений.
Для оркестрации контейнеров используют Kubernetes / Docker Swarm.
Ответ написан
sim3x
@sim3x
Почему когда используют Docker для поднятия окружения, создают по контейнеру на каждый сервис а не всё в одном контейнере?
Зависит от подхода к деплою

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

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

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

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

Войти через центр авторизации
Похожие вопросы