LINUX.ORG.RU

История изменений

Исправление Deleted, (текущая версия) :

Хм... Можно я тут немножко флейма по теме разведу? Я недавно ковырялся в докере, и как-то... разочаровался в нём, в общем. Разработчики обещали чуть ли ни серебряную пулю, решающую все проблемы сразу, а на деле вышло как обычно: интересная хренька для решения достаточно ограниченного круга задач.

Если более развёрнуто:

  • Docker расчитан на запуск ровно одного приложения внутри контейнера. Но большинство реальных линусковых демонов обычно имеют неявные зависимости, вроде syslog, cron/logrotate, etc. Да, можно их все запустить под каким-нибудь supervisord. Я вообще пропатчил upstart для запуска полноценной CentOS 6 внутри контейнера. Но зачем весь этот геморрой, если есть LXC, в котором это всё работает из коробки?
  • Предполагается, что все данные, используемые приложением, должны быть вынесены на внешний volume. И тут опять возникают проблемы. Во-первых, непонятно как это всё бэкапить (представьте себе тяжёлую БД внутри контейнера). Во-вторых, непонятно что именно нужно выносить. Нужно ли выносить /var/log? Или /etc/appname?
  • На данный момент, нельзя менять настройки существующих контейнеров. Хочешь заэкспозить ещё один порт или добавить вольюм? Хрен тебе, а не вольюм: удаляй и пересоздавай =).
  • docker-registry (тот, который можно поставить на свой сервер) работает через задницу и пользоваться им крайне неудобно.
  • Весь трафик для exposed портов идёт через юзерспейсный прокси. Непонятно нафига это было сделано, если docker всё равно модифицирует правила iptables. Руками сделать по нормальному тоже не выйдет без страшных костылей, так как у всех контейнеров динамические IP и это никак не настраивается.
  • Стандартный и рекомендуемый сторадж-драйвер для docker - это aufs, но его нет в мейнлайновом ядре. Если aufs не доступна, то используется device mapper. А там ЕМНИП до сих пор размеры контейнеров захардкожены.
  • Обновления контейнеров... По идеологии докера, для обновления нужно просто снова создать образ с помощью докерфайла, а затем пересоздать все инстансы (естественно, все данные должны быть на внешних вольюмах, иначе они удалятся вместе с инстансами). Для большого числа разношорстных контейнеров это создаст кучу проблем, так как нормальных средств автоматизации пока не предусмотрено.

Но, есть как минимум два случая, когда docker юзабелен:

  • Сервисы, которые специально разработаны для работы «в одиночку».
  • Короткоживущие «виртуалки» со сборочными/тестовыми средами для CI.

Исходная версия Deleted, :

Хм... Можно я тут немножко флейма по теме разведу? Я недавно ковырялся в докере, и как-то... разочаровался в нём, в общем. Разработчики обещали чуть ли ни серебряную пулю, решающую все проблемы сразу, а на деле вышло как обычно: интересная хренька для решения достаточно ограниченного круга задач.

Если более развёрнуто:

  • Docker расчитан на запуск ровно одного приложения внутри контейнера. Но большинство реальных линусковых демонов обычно имеют неявные зависимости, вроде syslog, cron/logrotate, etc. Да, можно их все запустить под каким-нибудь supervisord. Я вообще пропатчил upstart для запуска полноценной CentOS 6 внутри контейнера. Но зачем весь этот геморрой, если есть LXC, в котором это всё работает из коробки?
  • Предполагается, что все данные, используемые приложением, должны быть вынесены на внешний volume. И тут опять возникают проблемы. Во-первых, непонятно как это всё бэкапить (представьте себе тяжёлую БД внутри контейнера). Во-вторых, непонятно что именно нужно выносить. Нужно ли выносить /var/log? Или /etc/appname?
  • На данный момент, нельзя менять настройки существующих контейнеров. Хочешь заэкспозить ещё один порт или добавить вольюм? Хрен тебе, а не вольюм: удаляй и пересоздавай =).
  • docker-registry (тот, который можно поставить на свой сервер) работает через задницу и пользоваться им крайне неудобно.
  • Весь трафик для exposed портов идёт через юзерспейсный прокси. Непонятно нафига это было сделано, если docker всё равно модифицирует правила iptables. Руками сделать по нормальному тоже не выйдет без страшных костылей, так как у всех контейнеров динамические IP и это никак не настраивается.
  • Стандартный и рекомендуемый сторадж-драйвер для docker - это aufs, но его нет в мейнлайновом ядре. Если aufs не доступна, то используется device mapper. А там ЕМНИП до сих пор размеры контейнеров захардкожены.

Но, есть как минимум два случая, когда docker юзабелен:

  • Сервисы, которые специально разработаны для работы «в одиночку».
  • Короткоживущие «виртуалки» со сборочными/тестовыми средами для CI.