Будем честны, Docker сегодня — это самая трендовая и хайповая DevOps-тема наших дней. У нее множество фанатов и огромное комьюнити энтузиастов, в том числе и в России, которые всегда готовы делиться опытом друг с другом. Было бы странно, если бы в такой среде не родилась идея проводить митапы, целиком посвященные Docker и сопутствующим ему технологиям. Сказано — сделано! Первый московский Docker-event прошел успешно. Насколько — читай ниже.

 

Docker in brief

Если кратко, то Docker — это опенсорсная платформа для быстрого деплоя, запуска и остановки приложений в переносимых контейнерах. Корнями Docker уходит в недра проекта CRUI, который поставил перед собой задачу создать возможность останавливать и запускать процессы в Linux-системах без потери состояния. Контейнеры Docker изолированы, но используют одну ОС, «наслаивая» приложения на разных уровнях. Docker предоставляет единый CLI и API для того, чтобы управлять контейнерами — разворачивать, запускать, останавливать.

Если ты хотел подробнее узнать о Docker, но по какому-то недоразумению пока еще этого не сделал, то можешь открыть интерактивный туториал или послушать любой выпуск Радио-Т за 2014 год (привет, Umputun :)). А можешь просто дождаться следующего номера Х. У нас уже приготовлено кое-что специально для тебя!

Первый московский Docker Meetup проходил 26 февраля в московском антикафе «Бабочки». В качестве организатора мероприятия выступили ребята из Mirantis и российское сообщество OpenStack. Mirantis — это глобальная ИТ-компания с российскими корнями, один из лидеров международного сообщества OpenStack. Компания является третьим по объему кода контрибутором этой открытой облачной платформы. Ее разработчики, которых насчитывается более 600 человек, трудятся в офисах в Москве и в Саратове. Специалисты Mirantis участвовали в ряде крупных проектов на базе OpenStack в международных компаниях, таких как Ericsson, AT&T, Expedia и PayPal. Еще компания выпускает полностью открытый и бесплатный дистрибутив Mirantis OpenStack и оказывает его техническую поддержку.

Сотрудники Mirantis часто делятся своим опытом на различных эвентах, связанных с OpenStack. На этот раз доклады о Docker читали и другие представители сообщества — в том числе из Яндекса и Parallels. Слушателей было около 80 (зарегистрировалось, правда, вдвое больше), и доклады прошли оживленно, особенно когда дело доходило до вопросов аудитории.

Идея провести митап принадлежит Фабрицио Соппельса (Fabrizio Soppelsa), он работает инженером службы поддержки Fuel (системы развертывания облака OpenStack и последующего управления им) в московском офисе Mirantis (что-то мне подсказывает, что мы еще встретимся с Фабрицио на страницах ][. — Прим. главреда). В зоне его профессиональных интересов, помимо OpenStack, — Linux-контейнеры, масштабирование программных продуктов и возможности интеграции софта в облако. Фабрицио вкратце обрисовал формат мероприятия и на всякий случай познакомил слушателей с Docker — вдруг кто-то пришел просто поинтересоваться?

Фабрицио Соппельса
Фабрицио Соппельса

 

INFO

Fuel — один из элементов экосистемы OpenStack, он позволяет легко разворачивать и администрировать облако, имеет интуитивно понятный веб-интерфейс. Достоверно известно, что он корректно работает в окружении до 100 узлов. Fuel входит в Mirantis OpenStack.


Подробнее о том, какие есть плюсы и минусы у контейнеризации приложений и как разумно подойти к разработке и распределению контейнеров Docker, рассказал Мэтью Мосесон (Matthew Mosesohn) — еще один представитель Mirantis, старший разработчик в команде Fuel. Доклад Мосесона коснулся и проблем развертывания Docker в изолированном дата-центре.

Для облегчения работы с Docker можно воспользоваться каталогом готовых приложений, к примеру Murano. О нем собравшимся рассказал Серж Меликян, старший инженер Mirantis. Murano позволяет разработчикам и администраторам облаков публиковать cloud-ready приложения без лишних усилий — сейчас их счет в репозитории идет на тысячи. Murano предлагает новый уровень абстракции над IaaS и помогает управлять доступом к приложениям, составлять окружения из множества приложений и контролировать их жизненный цикл.

Еще одна актуальная проблема, которая стоит перед админами Docker, — это масштабирование учетной записи Docker registry. Денис Зайцев, руководитель группы эксплуатации облачной платформы и CDN в Яндексе, опираясь на примеры из практики, рассказал о вариантах решения этой задачи.

 

INFO

Вот две важные ссылки из доклада Зайцева: официальные репозитории Docker и GitHub для контрибуторов.

Docker — не первое решение подобного рода. Первопроходцем в 2001 году был Virtuozzo, созданный в стенах Parallels. Неудивительно, что с его упоминания и начал свой доклад Андрей Вагин — разработчик из команды Linux Kernel компании Parallels. Следом он рассказал о договоренности, к которой в прошлом году пришли Docker, Red Hat, Google, Canonical и Parallels. Было решено общими усилиями создавать единую библиотеку для работы с контейнерами — libcontainer. Доклад так и назывался: «Libcontainer: объединяя усилия под одной крышей». Немало внимания Андрей уделил и библиотеке libct (она написана на C, но имеет привязки к Go и Python). Libct предоставляет удобный API для фронтендов, который позволяет им управлять контейнером на протяжении всего его жизненного цикла. Вот две полезные ссылки из его доклада: собственно libcontainer и libct.

Андрей Вагин рассказывает про libcontainer
Андрей Вагин рассказывает про libcontainer

 

После мероприятия многие участники не разошлись по домам, а отправились продолжать тусоваться в еще более неформальной обстановке. Целью встречи было живое общение, и оно удалось на славу.

Если тебя заинтересовали слайды докладов, то можешь посмотреть их на сайте Mirantis.

 

Case study: Fuel как пример использования Docker

Начиная с версии MOS 5.0, Mirantis сделала ставку на Docker для того, чтобы реализовать простое и надежное транзакционное обновление Fuel: поднимаем новые контейнеры, проверяем и, если что-то пошло не так, возвращаем старые. Изменения позволили пользователям повторно разворачивать Fuel менее чем за 30 с без применения скриптов для возврата окружения в исходное состояние. Появилась возможность вносить изменения, оперативно их тестировать и, при необходимости, многократно откатываться назад. Именно оперативность изменений и стала результатом использования контейнеров. Для обновления приложения Fuel в Docker достаточно просто удалить старые контейнеры и запустить новые, сэкономив один-два часа, которые потребовались бы для повторной сборки Fuel ISO и тестирования сделанных изменений.

В MOS 5.1, помимо экономии времени, решалась и задача повышения стабильности работы Fuel. Помогла утилита dockerctl, которая отслеживает изменения настроек для Fuel в процессе обновления Docker, — в это время передаются сотни параметров в 13 контейнерах. Утилита dockerctl особенно важна из-за того, что устанавливается большое количество соответствий для приложений, требующих при развертывании пять-шесть параметров из нашего конфигурационного файла (astute.yaml) для каждого контейнера.

В самой актуальной на сегодняшний день версии продукта — MOS 6.0 — была учтена проблема с утилитой logrotate, которая по умолчанию сохраняет пять последних архивов (для этого требуется несоразмерное дисковое пространство, при том что Docker сам нуждается в дисковом пространстве для логов, которые могут заполнить все свободное место и обрушить файловую систему). У этой проблемы нет автоматического решения, поэтому даже с усовершенствованиями, сделанными Mirantis, все так же нужно отслеживать емкость диска, поскольку разработчики так и не научились пока предсказывать, какой объем логов будет генерировать пользователь. Несмотря на то что logrotate обновляет логи каждый час, утилита не отслеживает количество свободного места на диске, а настройка, которая бы позволила увеличить размер папки с логами Docker, отсутствует. Настройки logrotate ограничивают размер одного log-файла, по достижении которого он архивируется. Поэтому даже с увеличенными параметрами следует выделить 30 Гб исключительно для логов (при развертывании на 20 нод). Но если включить режим отладки, ротация больших файлов будет происходить каждые десять минут, а не каждый час.

К другим нововведениям для Fuel на базе Docker в Mirantis OpenStack 6.0 относится использование CentOS 6.5 в качестве операционной системы для мастер-ноды. Поскольку в CentOS 6.5 нет демона инициализации systemd, который бы постоянно запускал сервисы, Mirantis использует утилиту управления Supervisor для запуска и отслеживания контейнеров Docker, а также для запуска веб-приложений. «Два в одном», как любят говорить рекламщики.

Кроме того, используется простая схема try-or-fail для решения проблем с остановкой работы контейнеров, в которых нет унаследованных инструментов для отслеживания зависимостей. В данном случае, если контейнеры пытаются запуститься, а затем останавливаются из-за того, что PostgreSQL или RabbitMQ еще не запущен, Supervisor ждет несколько секунд и пытается снова запустить проблемный контейнер, и так до тех пор, пока все контейнеры не будут запущены. Такой метод намного проще поддерживать, чем сложную последовательность ввода в действие контейнеров на основе приоритетов.

5 комментариев

  1. 08.04.2015 at 12:46

    «трендовая», «хайповая», «комьюнити», «деплоя», «эвентах», «митап»
    Ой, да пиши ты уже по-английски, всё хоть легче будет понять, чем эту мешанину.
    Почему ж служба поддержки, а не сервис саппорта?

    • 09.04.2015 at 15:08

      Справедливости ради, зря ругаетесь.

      Тренд, хайп, деплой, митап, девопс — это устоявшиеся термины, которые признаны и широко используются в сообществе разработчиков. Если пытаться заменить их «боярским» русским будет просто непонятно, о чем речь. Я вот знаю, что такое «деплой на продакшн», а вот что такое «развертываение в промышленном окружении» заставит меня на какое-то время задуматься. Язык IT — английский, а если пытаться переводить — будет как с переводом Visual Studio 97 на русский язык.

      • 10.04.2015 at 18:06

        Я разработчик, но понятия не имею, что такое хайп, деплой, митап и девопс. Мы в офисе таких слов не используем, а значит и остальные работники о них не знают или не считают, что их целесообразно применять на публике. Возможно, это как-то с хипстерами связано или с Москвой, где очень хотят быть похожими на Запад. Но мы по-русски больше разговариваем. Сейчас справа от меня сидять два программиста, один что-то объясняет другому, употребляет слово «прокрутка», а не «скроллинг». И это нормально, есть же русский язык.
        Вот митап — это что, встреча? Я не очень хорошо знаю тонкости английского, но исходя из meet, это что-то связанное со встречей. Deploy вот сейчас посмотрел, это развёртывание. Ну есть же перевод-то у слова! Пусть это слово особенное, выкинем его из списка. А с «митапом» что не так? Не поймёшь слово «слёт» или «конференция»? По-моему, это как раз проще понять, чем «митап». Более того, по тексту он то «meetup», то «митап», это уж ни в какие рамки не лезет.
        А ещё комментарии теперь только для платных подписчиков. Идиотизм.

        • 11.04.2015 at 00:07

          А знаете, пожалуй, соглашусь с вами. Постараемся в будущем писать или уж по английски, либо подбирать, где это возможно, понятные аналоги. Спасибо, что поделились мнением.

          Но кстати, см, изображение во вложении. Гугл не просто знает, что такое митап, он даже подсказывает определение.

Оставить мнение

Check Also

Как Apple обходит стандарты, заставляя тебя платить. Колонка Олега Афонина

Иногда сложные вещи начинаются с простых: планшет iPad Pro 10.5 вдруг перестал заряжаться …