Parallels где ты был последние 10-ть лет?

docker - death to vmware, hyper-v and virtualbox

Хотел написать 140 слов о Parallels adopts Docker in next Cloud Server release, но меня как то понесло…

Я представляю как parallels кусает себе локти. Я нисколько не уменьшаю их заслуги в разработке тулов вокруг виртуализации, они очень много вложили в опенсоурс, но кто из обычных смертных за последние 10-ть лет хоть что-то пробовал запустить от parallels (кроме решения для домохозяек)? Или хотя бы задумывался над тем что продукты parallels могут решить какую-то повседневную проблему?

Docker поэтому и стрельнул т.к любой слабоумный может взять, один раз завернуть свое приложение и запускать его на серверах без боли. А деплой любого приложения это боль, и я всегда смеюсь когда кто-то говорит – «осталось совсем немного, только задеплоть за 15 минут», т.к сам был тем кто это говорил.

Во-первых надо менять процесс разработки, и с первого коммита должен быть непрерывный процесс объединенный с деплоем, если не на dev сервер, то как минимум в бокс vagrant. Это избавит в будущем от проблем когда в последний момент всплывает зависимость типа libjpeg-dev про которую забыли т.к её поставили один раз руками и всё. Плюс когда деплой интегрирован в разработку и происходит постоянно, так или иначе большинство проблем вылезут до этапа деплоя в продакшен, а так же при наличие комплекса неполноценности неуверенности перфекциониста, всегда будет не нравится то как это делается, и будет хоть понемногу, но улучшать этот процесс.

Во-вторых надо максимально упростить сам запуск приложения. Что происходило раньше:

  1. руками заходили на сервер или что хуже программировали на chef/puppet
  2. воссоздавали среду необходимою для запуска приложения
  3. строили и настраивали приложение
  4. запускали

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

Docker как раз решает эту проблему. Больше не надо нанимать «отдельного программиста» на chef для написания сотен строк рецепта для поднятия приложения. Деплой с docker упрощается и сводится только к тому как/чем распространить контейнер на сервера. В самом простом случае можно зайти руками на сервер и запустить пару команд для поднятия сложного приложения. Если инфраструктура сложнее то без какой либо системы управления не обойтись, но их конфигурация опять же упростится и будет сводится уже только к тому куда и какой контейнер залить.

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

На словах это всё звучит как бред, но на практике меня это подкупило. Вот например как выглядит мой конфиг для запуска sentry сервера:

fig.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sentry:
image: slafs/sentry
ports:
- "80:9000"
links:
- redis
environment:
SENTRY_URL_PREFIX: "**********"
SECRET_KEY: "**********"
SENTRY_ADMIN_USERNAME: 'admin'
SENTRY_ADMIN_PASSWORD: "**********"
SENTRY_ADMIN_EMAIL: "**********"
DATABASE_URL: "**********"
SENTRY_REDIS_HOST: 'redis_1'
SENTRY_EMAIL_BACKEND: 'django.core.mail.backends.smtp.EmailBackend'
SENTRY_EMAIL_HOST: 'smtp.mailgun.org'
SENTRY_EMAIL_HOST_USER: "**********"
SENTRY_EMAIL_HOST_PASSWORD: "**********"
SENTRY_SERVER_EMAIL: "**********"
redis:
image: redis

Всё что мне надо сделать на сервере это выполнить fig up и я получаю рабочее приложение.

Docker это не панацея и не решение всех проблем. Для больших проектов всё еще нужно средство для управления кластером и конфигурациями. Для сингл-сервер приложений, типа поднять сайтик на django + redis + postgres, docker сейчас самый мастхев.

Я бы очень хотел сказать что docker это самый лучший в мире инструмент, но я очень насторожено отношусь к людям который очень хвалят что либо. Поэтому сразу скажу что считаю docker еще тем говнищем, которое идет в ногу со временем и поощряет общую глупость массы людей. И мнимая простота docker вводит в заблуждения, и рано или поздно вдарит пользователю в щи, документацию ведь никто не читает, а на всех выступлениях нам показывают как супер просто за 5-ть минут поднять сложнейшее приложение, но никто не рассказывает про боль с которой можно столкнутся. Например каждый второй контейнер на https://registry.hub.docker.com/ вообще не предусматривает ситуации когда приложение крешнится (да я знаю что можно решить на стороне хоста, но про это тоже не рассказывают), или правильной настройкой логгирования для того что бы потом не искать по всей системе причины падения.

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

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

P.P.S и да я не осилил chef/puppet, я их считаю дерьмовыми продуктами для разворачивания приложения на один сервер. Варианты делать rpm/deb пакеты даже не хочу рассматривать, кажется что это решит проблемы, но будет n+1 проблема.