Всем привет, в последнее время всё чаще и чаще встречаю в требованиях к вакансиям опыт работы с Docker. Я слышал о нём большое количество раз, читал даже пару статей, даже работал в компании, где всё работало в контейнерах, но тогда мне было не до разберательств с ними, да и всем этим занимался админ. Решил что пришло время восполнить пробел в знаниях.
Итак, допустим у меня имеется MySQL кластер, один мастер и два слэйва, но в будущем всё может измениться в бОльшую сторону. Имеется машина, на которой развёрнут highload сервис, написанный на GO, имеет доступ к кластеру MySQL и так же локальный Redis, для кеширования запросов в MySQL ну и конечно же Nginx. Так же имеется сервис API и админка, оба написаны на Node.JS и живут на отдельной машине имеют доступ к кластеру MySQL ну и конечно же есть Nginx. Так же на отдельных двух машинах есть сервис сбора и агрегации статистики, должен быть доступ в локальный Redis и к кластеру MySQL и опять же есть Nginx. Все сервисы независимы друг от друга. Сейчас процесс деплоя на сервера производится руками. Захожу на сервер по SSH, накатываю изменения, собираю, и перезапускаю. Так же, на многих машинах имеются совсем крохотные сервисы, которые занимаются решением каких-либо задач, их описывать не стал, но они как правило имеют доступ к MySQL, к сети и файловой системе, например к логам Nginx.
Ну и собственно сам вопрос: как использование Docker контейнеров может облегчить жизнь мне, простому разработчику, по совместительству тимлиду и по совместительству сисадмину. В интернетах столько информации об этом, что глаза разбегаются от объёмов.
Docker нужен, чтобы запускать идентичные билды приложений с окружением, изолированные от остальных процессов на хосте. Если вам оно не надо, значит оно не надо.
P.S. С highload сервиса, запускаемого на одной машине, смеялись всей маршруткой.
P.P.S. За деплой вручную по этим самым ручкам давно пора бить.
расскажете как нужно деплоить, чтоб ни у кого не возникало желания бить по рукам?
смеялись всей маршруткой
Зря смеялись, понимаю, у всех понятие highload разное. 18-ти ядерные машины с четвертью террабайта оперативы способны творить чудеса, в районе полусотни тысяч запросов в секунду. Возможно для вас это детская нагрузка, но нам пока достаточно и этого.
расскажете как нужно деплоить, чтоб ни у кого не возникало желания бить по рукам?
Jenkins или любое другое могущее в деплой CI-решение если есть, Ansible/Chef/Puppet/SaltStack если нету.
18-ти ядерные машины с четвертью террабайта оперативы
Highload начинается там, где заканчиваются возможности просто добавить ресурсов и приходится менять архитектуру сервиса. У вас ещё есть куда расти (привет AWS x1.32xlarge/топовые Dell PowerEdge). Sanes, Спасибо, в курсе.
К примеру в docker-compose.yml прописываете контейнеры и параметры с которыми нужно их стартовать, беря при этом готовые контейнеры - mysql, redis, nginx, nodejs, и пр., при необходимости указываете установку дополнительных зависимостей и настройку отдельных контейнеров в Dockerfile, стартуете их одной командой docker-compose up -d, и работаете в том же окружении что и на серверах на продакшене, ничего не доустанавливая себе в систему.
То есть имея docker контейнеры я могу у себя на локалке, или на продакшн серверах или в dev среде создавать одинаковое окружение без особых временнЫх затрат? Это наверное удобно.
Остаётся непонятным одно, почему от программиста требуют знания Docker, мне кажется это задача сисадмина.
Andrey Tsvetkov, предполагается, что черед докер прогер указывает контракт КАК запускать в проде. а не постфакту админы, тестеры и прогеры бегают и пытаются понять чего на хостах разное (в результате ручного деплоя в том числе) что у одного баг есть, у другого баг по другому а у третьего его вообще нет.
> То есть имея docker контейнеры я могу у себя на локалке, или на продакшн серверах или в
> dev среде создавать одинаковое окружение без особых временнЫх затрат? Это наверное удобно.
Совершенно верно
> Остаётся непонятным одно, почему от программиста требуют знания Docker, мне кажется
> это задача сисадмина.
Это задачи на стыке. Часто при разворачивании и работе с нужным ПО программисту требуется доустановить определенные библиотеки со своими зависимостями, изменить какие-то параметры подключения, подключиться к базе напрямую и выполнить какие-то запросы, запустить редис и глянуть сырые данные, и прочее. Вот чтобы не гонять для этого каждый раз специально обученного человека, и не простаивать это время - знания и умения работы программиста с докером и требуются.