L
L
Lexxtor2018-09-12 20:56:14
Web development
Lexxtor, 2018-09-12 20:56:14

Why, when they use Docker to raise the environment, do they create a container for each service and not everything in one container?

Http server in one container, database in another, programming language is launched in the third one.
It turns out 3 virtual machines, there are also more overheads than if everything were in one container.
This is probably for subsequent scaling, or not only, or is it nothing to do with it?

Answer the question

In order to leave comments, you need to log in

9 answer(s)
Александр Талалаев, 2018-09-13
@neuotq

Вы совсем не понимаете Докер. У него основная концепция - один сервис/приложение - независимое окружение.
Для чего это сделано? Прежде всего безопасность и облегчение развертывания приложения.
Любой администратор линукс (ну и других) систем знает, какого это поддерживать сервер одновременно в актуальном состоянии и нужные версии ПО, библиотеки которых часто между собой конфликтуют, нужно проводить танцы в бубном для того чтобы нужные библиотеки были там те, в другом месте другие. Далее возня с правами, кто под кем запускается, что может, дыры в самом ПО, когда из-за этого будет угроза другим частям системы. Ну и простота настройки, одним одни параметры, другим другие.
Докер позволяет решить эти и кучу других проблем, каждый докер образ это грубо говоря максимально минимизированный образ ОС с установкой только необходим библиотек для конкретного сервиса (например mysql), запускается независимо. Таким образом у себя на сервисе вы имеете возможно спокойно, без затрат умственных ресурсов поднять кучу версий например mysql или php. Да и просто разные программы/сервисы которые могут с друг другом конфликтовать, теперь не будут мешать.
У вас есть свои заготовки образов, либо вы берете готовый рецепт и работаете.
Далее тестирование/разработка значительно упрощается, так как организовать условия максимально приближенные к боевым теперь легче.
Далее можно создавать проверенные системы развертывания, снова таки каждый образ под свои задачи и тд и тп.
Короче говоря да, у докера есть свои минусы, но одновременно это значительный прогресс и облегчения прежде всего работы которая касается улосноый Devops части в разработки ПО, значительно автоматизируются и упрощаются многие штуки.
Так же советую потратить время и посмотреть запись введение в Докер от Хекслет Кирилла Мокевнина. Там небольшие проблемы бывают со звуком, сам вебинар 2 часа, но советую потратить время, он именно рассказывает проблематику, которая привела людей к изобретению Докера и этой концепции.

S
Saboteur, 2018-09-12
@saboteur_kiev Куратор тега Веб-разработка

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

S
samizdam, 2018-09-12
@samizdam

На примере LAMP
1. Задел на горизонтальную масштабируемость. Нужно сделать несколько бэкендов, делаете два P. Оркестраторы это поддерживают. В одном контейнере не тривиальная задача.
2. Распределённость, изолированность. Общаясь только по сети, все сервисы могут быть запущены на разных нодах, в кластере, etc. Опять из коробки же есть разные плюшки для организации сетей. Сюда же отвязка от файловой системы одного хоста.
3. Один контейнер - один процесс. Докер, как супервизор, либо оркестраторы, берёт на себя часть проблем по перезапуску контейнера. в случае некоторых проблем. Если мухи и смузи в одном стакане (контейнере), самостоятельно придётся решать, к какому из процессов его привязать.
Первый два комментатора похоже не очень умеют в докер. Или не понимают. Или не пробовали.

Валентин, 2018-09-12
@vvpoloskin

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

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

D
Denis Michurin, 2018-09-12
@denistu10

Потому что концепция Docker такова, один контейнер - один процесс.

S
Sanes, 2018-09-12
@Sanes

От нечего делать. Особенно, когда банальный LAMP

R
ru-soft, 2018-09-12
@ru-soft

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

R
Román Mirilaczvili, 2018-09-12
@2ord

Потому что Docker отвечает за виртуализацию на уровне процессов ОС, то есть отдельных приложений.
Для оркестрации контейнеров используют Kubernetes / Docker Swarm.

S
sim3x, 2018-09-13
@sim3x

Почему когда используют Docker для поднятия окружения, создают по контейнеру на каждый сервис а не всё в одном контейнере?
Зависит от подхода к деплою
В случае "хостера" - клиента попросят засунуть все в один контейнер или платить за каждый контейнер отдельно
В случае "балансировки нагрузки" через копирование бекендов, помещение кода в контейнер - разумное решение.
В случае нагруженного проекта - СУБД лучше помещать отдельно прямо на железо без контейнеров и виртуализации
Также стоит заметить, что после установки докер не является гарантией безопасного исполнения произвольного кода юзера

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question