Зачем нужен Docker?

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

Изоляция приложения? С этим справляется разграничение прав пользователей.
Разграничение библиотек? Для этого в каждом языке есть готовые инструменты. На уровне системы... Можно устанавливать в префиксы - и динамически-линкуемые библиотеки будут подхватывать нужную версию.

Да и вообще, проблема изоляции, мне кажется, слишком надумана. Кто ставит на один сервер (неважно, виртуальный или железный) несколько приложений? Скорее наоборот более частый сценарий - много серверов с одним приложением.

Так зачем он нужен?

У меня есть настойчивое и необъяснимое желание создать личный paas, на основе docker + deis, или даже cocaine - но не могу обосновать зачем, учитывая что у меня накоплено много ansible и fabric скриптов, упрощающий вопросы администрирования/сборки/деплоя.
  • Вопрос задан
  • 15711 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
tl/dr: Docker это VCS для инфраструктуры в первую очередь.

С этим справляется разграничение прав пользователей.

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

Разграничение библиотек? Для этого в каждом языке есть готовые инструменты. На уровне системы... Можно устанавливать в префиксы - и динамически-линкуемые библиотеки будут подхватывать нужную версию.


А когда требуются системные библиотеки разных версий для разных инструментов? С Docker у вас для кадого контейнера полностью свое изолированное окружение. И это удобно поддерживать.

Кто ставит на один сервер (неважно, виртуальный или железный) несколько приложений?

Все. mysql, postgresql, redis, nodejs, rabbitmq, zeromq, apache, nginx, tomcat... ну вы поняли. Все это отдельные приложения. А еще есть микросервисы. Если у вас все это изолировано на уровне контейнера то у вас нет никаких проблем с тем что бы раскидывать их потом по разным сервакам для более гибкого масштабирования.

Скорее наоборот более частый сценарий - много серверов с одним приложением.

Повторюсь, ваше приложение имеет инфраструктуру. И вот как раз таки инфраструктуру представляют те приложения, которые мы хотим изолировать.

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

Предлагаю вам представить такую ситуацию: у вас есть простенькое приложение которое приносит вам деньги, которое использует какую-то инфраструктуру. Вам предстоит релиз. С докером мы собираем образ контейнера, выкатываем его на стэйджинг сервер, тестируем (автоматически или вручную), и когда все хорошо мы этот же билд выкатывает на прод. То есть шансы того что между стэйджингом и продом будут различия инфраструктуры сведены к минимуму. Docker уменьшает риски. А сама идея LXC далеко не новая, docker просто сделал это удобным.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
@lega
По мимо изоляции и т.п. Docker ценен тем что приложения превращаются в "продукт".

* Например попробуйте настроить на сервере OpenVPN - нужно будет читать доки, настраивать конфиги, сертификаты, гуглить баги именно под ваш сервер. Вообщем - трата времени, а с доккером это одна команда за пару минут - и OpenVPN готов.
* Нужен почтовый сервер уровня гугла и яндекса - одна команда докера (без него опять же трата кучи времени).
* Хотите использовать cassandr'у - какую там версию джавы надо? а не пересечётся ли она уже с установленной? С докером вам не обязательно знать что-там внутри - работает и это достаточно.
Т.е. докер дает вам как бы готовое решение.

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

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

Так же бывает что на одной машине разработка работает (на дев-машине), а на сервере нет. - тут докер обещает что везде будет работать одинаково.

// Забыл добавить
с докером не нужно заморачиваться с логинами и паролями (я использую без пароля) т.к. база будет доступна только вашему приложению (или нескольким - как настроите).
Ответ написан
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
Вкратце - для "хуяк-хуяк и в продакшн".
Впрочем, это не отменяет того, что докер можно и нужно эффективно использовать для деплоя приложения в прод/тестинг с зависимостями, но сборка должна оставаться всегда воспроизводимой.

Но по большей части он удобен как достаточно тонкая (в сравнении с полноценной виртуализацией) прослойка от железа - можно мигрировать и заниматься прочими непотребностями. Ну и конечно можно быстренько расширять кластеры по количеству железа почти бесплатно.
Ответ написан
Deroy
@Deroy
Senior Developer, Software Architect
Добавлю свои пять копеек:

С помощью докера очень удобно разворачивать целиком инфраструктуры - вот например у меня есть проект - который состоит из десятков сервисов - если бы я не использовал докер - мне бы пришлось отдельно писать, отлаживать, тестировать скрипты по развертыванию и запуску всего того зоопарка систем которые нужны что инфраструктура работала. + свистопляска с конфигурацией, с тем что где на каком порту висит и кто куда должен ходить или не должен - на докере эта задача решается конфигом на 50 строк для docker-compose.

и обновление инфраструктуры превращается в одну команду вместо десятков скриптов по обновлению отдельных компонентов системы.

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

да и те же сторонние сервисы, как уже упоминал lega , разворачивание превращается в праздник а не в задачу на неделю...
Ответ написан
un1t
@un1t
Я чесно говоря, про докер не знаю, но кейсов когда на серверах общежитие довольно много. У нас кластер серверов, на котрый деполится много проектов, которые разрабатывают разные команды.
С этим можно жить как-то даже без всякой изоляции, просто команды будут вынуждены использовать одни и теже версии библиотек. Если надо обновить библиотеку, то это целая эпоппея. Вобщем проблема изоляции определенно есть. Частично она решается на уровне менеджеров пакетов языков программирования virtualenv, node_modules. Но если уровень изоляции будет выше, то наверно будет удобнее для разных команд.
Ответ написан
opium
@opium
Просто люблю качественно работать
ограничение прав пользователей не решает проблему изоляции как и чрут местами, то есть если пользователь выставил права 777 как ваша изоляция работает то ?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
МОБИ.Деньги Санкт-Петербург
от 130 000 руб.
IQ Oрtiоn Software Санкт-Петербург
от 150 000 руб.
Т-Платформы Москва
от 120 000 до 250 000 руб.
18 марта 2019, в 20:32
2000 руб./за проект
18 марта 2019, в 19:35
500 руб./за проект
18 марта 2019, в 19:31
100000 руб./за проект