@ksim_miloff

Docker как панацея для разработчика?

Всем привет,
Я программист, не начинающий, но точно все-еще очень не опытный :). Вот мне, впервые в жизни, выпала честь заниматься настройкой хостинга для нового проекта. Само собой, локальную машину настраивать я умею давно, да и с хостингом думал, что не на много сложнее. Сам по себе хостинг - это два VPS, один для базы, второй для самого приложения (продакшн и стеджинг). Сидел, изучал капистрану и сам, уже не помню как, обратил внимание на докер, заинтересовался, прочитал несколько статей на хабре, парочку статей на английском и мне показалось все это очень перспективным. До этого я слышал о докере, но воспринимал его как виртуальную машину или что-то типа вагранта, теперь мое понимание несколько лучше. Так вот, вопрос пишу не с целью "помогите настроить докер", а скорее "помогите упорядочить информацию" или даже "разбейте мои большие надежды о докере в пух и прах" :).

Из того, что я вычитал у меня сложилось впечатление, что докер может все:
  1. docker-daemon - это HTTP-сервер и он может взять на себя это работу на стороне сервера, т.е. nginx не нужен
  2. docker на дев-машине можно (как-то) связать с докером на хостинге
  3. и учитвыая предудущий пункт - docker можно использовать для деплоя
  4. docker можно использовать для отката, если деплой не задался
  5. пропадает необходимость в во всяких rbenv и pyenv, если нужна другая версия языка, то просто создается новый контейнер в котором и происходит установка
  6. докер очень быстрый, в т.ч. старты и рестарты
  7. еще какие-то плюсы?


Правильно ли я воспринимаю систему? Не слишком ли большие ожидания?

Уверен, что забыл еще пару вычитанных приятностей, но это вроде основные, я до сих пор не верю, что правильно все понял. Все-еще нахожусь в процессе чтения статей и документации. Был бы благодарен за ссылку на подробный материал для чайников.

Спасибо, надеюсь, что вопросы не глупые :)
  • Вопрос задан
  • 619 просмотров
Решения вопроса 1
Tyranron
@Tyranron
Для начала нужно понять "контейнер" и "контейнеризацию".
Контейнеризируя процесс, мы его изолируем в своей среде, со своим личным user space. При этом ядро ОС (kernel) при работе контейнера используется то же самое, что и у основной ОС машины.

Выгода здесь в том, что к контейнерам можно относиться как к этаким "бинарникам", грубо говоря. У Вас есть какое-то приложение, не важно какое-оно, будь то набор скриптов на PHP, либо уже скомпилированное что-то (postfix, nginx, apache, и т.п.). Вы это приложение и все его зависимости упаковываете в контейнер (создаете image) и на выходе получаете единое готовое "что-то", что Вы можете запустить и оно не требует более никаких зависимостей (кроме рантайма контейнеров - Docker, rkt, и т.п.). Полная аналогия с тем, как из вороха либ и исходников Вы компилите единый бинарник, который просто потом запускаете где хотите, без необходимости иметь исходники.
Как мы привыкли в менеджерах зависимостей (composer, bower, другие) описывать и фиксировать зависимости исходного кода, так же и в контейнере мы делаем то же самое, но для окружения нашего приложения. Reproducibility во все поля.

Это очень сильно упрощает жизнь. Вам больше не нужно заботиться о том, что для приложения нужно точно воспроизводить окружение на каждой машине, оно у Вас зафиксировано внутри контейнера. Никаких больше конфликтов между различными версиями jvm, php, python, ruby, nginx и т.д. Вы легко на одной и той же машине используете какие хотите приложения, каких хотите версий. Выкатка его же на другую машину больше не требует филигранной подгонки и согласования окружения в соответствие. У Вас больше не отвалится внезапно приложение, из-за недонастроенных апдейтов ОСи и внезапного обновления зависимых либ.

А что Docker?
Docker - это набор инструментов для работы с контейнерами.
Docker daemon являет собой рантайм контейнеров, он их запускает, останавливает, отслеживает.
Docker registry - это контроль версий созданных образов (images) приложения, по аналогии к контролю версий исходников приложения.

Все. Концептуально ничего более Docker и контейнеризация не дают.

Отвечая на Ваши вопросы:


  1. docker-daemon - это HTTP-сервер и он может взять на себя это работу на стороне сервера, т.е. nginx не нужен

    Нет. Docker daemon - это рантайм контейнеров. Он умеет "слушать" на определенных портах, но это сделано для взаимодействия с Docker runtime'ом, а не для выполнения функциональности HTTP-сервера. HTTP-сервер все ещё нужен, и он может (а по-хорошему и должен) быть запущен внутри контейнера.


  2. docker на дев-машине можно (как-то) связать с докером на хостинге

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


  3. и учитвыая предудущий пункт - docker можно использовать для деплоя

    ИМХО, нужно. Вы закатали в образ точную версию приложения и его окружения. Осталось теперь этот "бинарник" запустить где хочется.


  4. docker можно использовать для отката, если деплой не задался

    Легко. Просто тушим контейнер нового образа и подымаем обратно старый.


  5. пропадает необходимость в во всяких rbenv и pyenv, если нужна другая версия языка, то просто создается новый контейнер в котором и происходит установка

    Да. Вы в Dockerfile, по сути, точно декларируете свое окружение. Нужно другое окружение - меняем Dockerfile и создаем новый образ.


  6. докер очень быстрый, в т.ч. старты и рестарты

    Не понятно - быстрый в чем? Наверное, имеется в виду сравнение с виртуальными машинами. Да, накладные расзоды меньше, нежели у виртуалок, так как используется одно и то же ядро ОС. Просто процессы запускаются в разных user space'ах. В остальном скорость Docker - это скорость запуска, собственно, процессов. Если у Вас тяжелое приложение с медленным стартом (привет, FMS!) или остановкой, то Docker тут Вам ничем не поможет.

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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