суббота, 15 февраля 2014 г.

Docker

   Последние 2 недели играюсь с Docker. Охеренная штука оказалась... не без изъянов конечно.  Итак если в кратце, плюсы Docker:
1. Docker реально очень быстрый. Виртуальные машины просто на порядок медленнее.
2. Docker простой - если почитать документацию то все в принципе логично и понятно.
3. Docker очень быстро развивается
Из недостатков:
1. Есть некоторые косяки. Lxc сам по себе не верх стабильности, а тут еще и Docker своих багов добавляет. Хотя они честно пишут об этих багах и даже в документации есть ссылки на тикеты с багами.
2. Средства связывания находятся в состоянии зародыша. Контайнеры нельзя линковать друг к другу динамически, шары(volume) нельзя изменять динамически. Получается ситуация - да, ты можешь реально быстро распихать компоненты по контейнерам, запускать их на любой машине - но задача связывания этих компонентов не решена совсем. Ведь для построения работающей системы нужно чтобы эти компоненты знали друг о друге. Вот у тебя есть компонент - база данных, а куда к ней коннектится ? IP адреса-то динамические ?? Если бы они внутри Docker реализовали discovery сервис - цены бы ему не было. Но сейчас мы имеем ровно 2 варианта:
1. Если  оба контейнера находятся внутри одного  физического сервера, то ты можешь связать их при помощи опции link. Но опять же - ее нельзя задать для уже запущенного контейнера. И этот способ не работает когдя нужно связать компоненты, находящиеся на разных физических серверах.
2. Использовать сторонние discovery сервисы:
 - SkyDNS
 - Discoverd
 - Etcd
 - Serf
В общем для рельной работы с Docker нужно использовать один из этих сервисов. Все эти link - выглядят как костыли. Строить свое live окружение на костылях - себе дороже будет.