Добрый день!
Я не до конца в теме, и честно говоря не особо вникал, но зачем может понадобиться Docker кроме как игрушка для админа?
Я сооооовсем не догоняю, и поэтому хотел бы попросить вас объяснить мне как дурачку:
Вот допустим мой стандартный стек:
* NodeJS
* MongoDB
* Nginx
* RabbitMQ
* Memcached
* GO // Это реже, но иногда пишу на нем нативные утилиты, которые дергает Node
Все данные в Mongo, RabbitMQ и на локальных папках Node-программы (она иногда пишет в них логи, сохраняет обработаные данные, которые не влезают в могну), очень важны, даже после падения, т.е. потерять и забыть не вариант.
Но при этом однотипных вопрекров ноды, порой бывает очень много (до 100), и каждый раз поднимать виртуалку, и убивать ее же это не очень удобно. И при этом порой нужно бы поднять еще воркеров 50, допусти в праздники или выходные, когда данных много, а по ночам наоборот убивать их, что-бы не простаивали и не хавали амазоновсие бабки.
И вот он сам дурацкий вопрос:
* Стоит ли мне учить, докер. И использовать его у себя?
* Нужно ли все пихать в контейнеры, или базы и Rabbit как обычно запускать на виртуалках?
* Можно ли делать приватные контейнеры с Node-воркером. Так как в них зашиты конфиги, в публичный хаб им путь заказан.
abcdefghijklmnopq: здоровый мазохизм. А если серьезно, то каждую субботу руками поднимать 10 вируалок, по SSH закидывать в них ноду, компилить ее, закидывать свое приложение, конфигурировать его, закидывать супервизор, конфигурировать его, это немного накладно и утомительно.
HoHsi: А почему поднимать руками? Речь идет о активной разработке ПО?
Тогда, может поглядеть на PaaS? Там уже все сделано. Довольно удобно. На стадии активной разработки особенно удобно.
Запустил одну команду - отправить на сервер: оно само уезжает, компилится и заменяет старую версию. Если что - также легко откатывается.
abcdefghijklmnopq: не совсем, сервис то закончен, а вот трафик очень непредсказуемый. Бывает, что одним воркером можно обойтись, а бывает, что нужно 20. А держать 20 простаивающих машин на DO - ерунда, так как жрать они будут достойно. Отсюда и вопрос, как быстро разворачиваться и сворачиваться, что-бы небыло мучительно больно.
HoHsi:
а почему вы не хотите воспользоваться умными облачными сервисами, которые сами поднимают нужные инстансы?
и опять же - PaaS это все умеет автоматически.
А если хотите автоматизировать, то одним Docker не обойтись. Тут целый Cocaine надо (Docker там внутри может быть при желании) или что-то подобное. https://habrahabr.ru/company/yandex/blog/209324/
abcdefghijklmnopq: спасибо, чуть позже прочту. А "не хочу ими пользоваться" потому что попросту не знаю про их существование. Я не очень хороший администратор, я больше код люблю писать, а деплоиться хочется с минимальными затратами нерв.
HoHsi:
Ну вот для таких целей - сосредоточиться на разработке - и придуман PaaS.
Это такой вид хостинга, где ты манипулируешь не демонами/службами, а именно ресурсами, используемыми твоей программой.
Нулевое администрирование.
Задаешь в настройках, что тебе нужен автоматический запуск до 10 воркеров (просто число указываешь). И что один воркер способен обработать одновременно, например, 100 запросов. На 101 запрос, если твой веб-сервер задумается и не успеет обработать запросы, будет автоматически поднят 2-й воркер и т.д. Через какое-то время, если все спокойно воркер будет отключен сам.
Кокаин по моей ссылке выше - это и реализует. Но только Кокаин предназначен для самостоятельной установки и администрирования. А PaaS - это уже готовые хостинги.
Хостинг типа PaaS предоставляют Google Cloud Services (AppEngine называется, сокращенно GAE), Heroku, OpenShift, Jelastic, и еще вагон и маленькая тележка.
Хостинг PaaS сильно привязан к языку программирования, поэтому годится не любой, а именно тот, что поддерживает ваш язык программирования.
Недостаток:
ПО нужно делать с учетом особенностей конкретного PaaS. Иначе будет совсем не экономично по деньгам.
И как минимум небольшую адаптацию в конфигурации - определенным образом получать доступ к БД и т.п.
Можно и комбинацию использовать. Я использую Google AppEngine для логики веб-сервера и совсем другого хостера для хранения статических файлов (картинок, видео).
- Docker для управлением окружением (как для dev так и для prod)
- Docker-distribution для хранения собранных образов контейнеров
- Docker-compose для оркестрации контейнерами на целевой машине (для dev это моя машина, для prod удаленный сервер)
- Docker-machine для управления удаленными машинами (оно само поставит докер куда надо и все такое)
- Docker-swarm (пока не использую, небыло необходимости) - для оркестрации контейнерами в класстере, с failover и тд.. Так как docker-machine можно настроить так что бы тот еще и создавал инстансы (например дроплеты на DO) то можно организовать полностью автоматизированную систему с определенным уровнем отказоустойчивости.
В целом для деплоя можно вообще по SSH не заходить. Дико удобно, особенно когда много проектов и много серверов.
Если вы задаете вопрос «Зачем мне нужен XXX» значит XXX вам не нужен. Docker нужен для того, что бы с ним играть, очевидно вы предпочитаете другие игрушки.
Не совсем, я забыл рассказать свою грустную историю:
"А если серьезно, то каждую субботу руками поднимать 10 вируалок, по SSH закидывать в них ноду, компилить ее, закидывать свое приложение, конфигурировать его, закидывать супервизор, конфигурировать его, это немного накладно и утомительно."
Так, что сейчас я ищи как раз себе такую игрушку, и докер мне пока мелькает перед глазами чаще всего. Я не очень хорош в администрировании, я больше люблю код писать, так что хотел бы выбрать самую округлую и безопасную игрушку, чтобы не пораниться
На самом деле, дурацкий ответ. Мы бы не пользовались множеством инструментов, если бы не узнали о них. Мы бы просто не догадались, что с ними проще. Человек, который никогда не видел электрический шуруповёрт, сможет догадаться, что есть что-то лучше отвёртки? Возможно, он даже сделает костыль, например, приделав к отвёртке рычаг.
e_asphyx: это называется "зачем мне эта игрушка если я могу с закрытыми глазами LXC запустить или там через cgroups все изолировать".
У каждого свои "игрушки". Мне вот лень разбираться со всем на свете, я хочу что бы вся эта рутина (вроде настройки окружения) делалась одной командой для десятков серверов. Что бы я мог тратить как можно больше времени непосредственно на основную работу. А выделять целого админа на то что бы он днями "игрался" мне как-то не оч выгодно.