На дворе 2017 год, а в различных статьях и, тем более, комментариях к ним то и дело приходится встречаться с мнением, что Docker — удел неопытных энтузиастов, экзотических компаний-однодневок и каких угодно экспериментов, максимально удалённых от реального production. И вот пока коллеги готовят новые технические материалы, я решил на публично доступных примерах и фактах показать, что это скорее миф и стереотип, чем мир, в котором живёт ИТ сегодня.



Масштабы и тенденции докеризации


Отправная точка для этой статьи — статистика от сервиса мониторинга Datadog, которая впервые появилась в 2015 году и в последний раз была обновлена буквально на днях, в апреле 2017 года. Datadog — это не какая-то традиционная аналитическая компания, а известная своей дружелюбностью к облачным окружениям система мониторинга (код её агента написан на Python и опубликован как Open Source).

Имея в своём распоряжении огромную базу данных об устройстве инфраструктур в компаниях со всего мира, Datadog собрала статистику по адаптации Docker, которую сама охарактеризовала как «никакой шумихи, только факты». Собранная статистика представляет 10 тысяч компаний и 185 миллионов контейнеров, используемых для каких-либо целей (конечно, это вовсе не обязательно production, но по меньшей мере — часть инфраструктуры, которую имеет смысл мониторить). Вот полученные факты:

1. Если в начале марта 2016 года, около 13,6 % клиентов Datadog использовали Docker, то через год (т.е. к марту 2017 года) этот показатель вырос на ~38 %, составив 18,8%.

2. Docker запущен на 15 % всех хостов, представленных в мониторинге. Для сравнения: два года назад таких хостов было всего 3 %, и это куда более значительный рост.

3. Лидерами адаптации Docker являются крупные компании. Чем больше хостов у компании в мониторинге, тем вероятнее наличие Docker. Около 60 % организаций с 500+ хостами названы пользователями Docker. Последнее обновление исследования также зафиксировало рост интереса к Docker со стороны средних организаций (от 100 до 500 хостов): количество пользователей Docker среди них уже приблизилось к показателю среди крупных компаний.

4. Около 40 % пользователей Docker применяют такие инструменты для работы с контейнерами, как Kubernetes, Mesos, Amazon ECS и Google Container Engine. Год назад таковых было вдвое меньше.

5. Пользователи Docker примерно в 5 раз увеличивают число запущенных контейнеров в период с первого по десятый месяц его применения.

6. Чаще всего в Docker запускают следующие сервисы: nginx, Redis, Elasticsearch, Registry (18 % компаний, использующих Docker), PostgreSQL, MySQL, etcd, Fluentd, MongoDB, RabbitMQ.

7. В среднем на одном хосте запускается по 7 Docker-контейнеров. 9 месяцев назад показатель был ниже — по 5 контейнеров.

8. Средняя продолжительность жизни Docker-контейнера — 2,5 дня; для сравнения, у виртуальной машины — 23 дня. Существенная зависимость была зафиксирована от наличия инструментов оркестровки — в компаниях без них контейнеры в среднем живут по 5,5 дней.

Статистика Sysdig


Схожую статистику по Docker собрали в Sysdig (публикация от 12 апреля 2017 года) — сервисе, специализирующемся на мониторинге Docker и отличающимся хорошей поддержкой связанных с ним технологий. Правда, там проанализировали гораздо меньше: всего 45 000 контейнеров. Из интересного в их разрезе данных можно отметить большую популярность Kubernetes (43 % от всех пользователей, и в эту же категорию включены продукты вроде OpenShift и Tectonic), Quay (22 % пользователей на фоне 15 % у Docker Registry).

(Самые популярные сервисы, запускаемые в Docker, по версии Sysdig)

Статистика из России




Наконец, мы обратились к российским коллегам из okmeter.io, мониторинг которых используем в своих проектах. Согласно полученным статистическим данным, у пользователей этого сервиса тоже наблюдается стабильный и значительный рост популярности Docker. Если в январе 2016 года всего 9 % компаний использовали Docker, а установлен он был на 3 % хостов, то в апреле 2017 года процент компаний почти удвоился, составив 17 %, а хостов — вырос более чем в 7 раз, поднявшись до 23 %. Таким образом, показатель числа пользователей очень близок к самой большой выборке от Datadog, а распространённость Docker на хостах у клиентов okmeter.io оказалась в полтора раза выше.


Истории успеха от Docker Inc


От общего — к частностям. На сайте самой Docker Inc, конечно же, есть раздел с клиентами и их историями успехов. В нём можно найти по-настоящему известные бренды. Не буду заниматься полным перечислением и вместо этого приведу примеры некоторых из них с указанием годов внедрений/обновлений.

BBC News


BBC News ежедневно только на английском языке публикует по 80 тысяч новостей, обслуживанием которых занимается система, работающая на 150 серверах с приложениями на JVM и PHP. В инфраструктуре было десять различных окружений для Continuous Integration, запускающих огромное количество заданий, используемых 500+ разработчиками. Задания выполнялись очень долго (полчаса на постановку в расписание и еще полчаса на исполнение) и последовательно. Перейдя на контейнеры в 2015 году, от получаса на планирование удалось избавиться, т.к. запуск задач стал параллельным, а время исполнения заданий сократилось. Вдобавок, новое окружение стало более открытым, масштабируемым и надёжным, что позволило ему стать лучшей практикой, адаптированной в других проектах BBC. (Подробности о проекте доступны в 2-страничном PDF-файле.)

eBay


Один из крупнейших интернет-магазинов столкнулся с ограничениями виртуальных машин, которые использовались для оптимизации процессов разработки приложений. Перейдя на Docker для непрерывной интеграции, в компании организовали процесс, который обеспечивает выкат контейнеризированных приложений на ноутбуки разработчиков, тестовые окружения и в production. В 2014 году команда eBay PaaS Team в своём технологическим блоге публиковала подробности об используемой модели CI с Mesos. В 2015 году представители eBay рассказывали об использовании Docker-контейнеров с Kubernetes (и OpenStack).

Expedia


Туристическая компания Expedia (более 18 тысяч сотрудников в 60 странах) в ~2012 году решила перейти на облачную инфраструктуру, благодаря чему её инженеры начали свой путь к микросервисной архитектуре. Для создания и деплоя таких приложений понадобились подходящие и надёжные инструменты. Результатом стало то, что в 2016 году более 200 контейнеризированных приложений были запущены в production с использованием Docker (хостятся в AWS). Дополнительно у разработчиков есть свой дата-центр, в который у разработчиков также налажен деплой. Среди используемых инструментов упоминаются Docker Engine, Docker Trusted Registry (более 1000 репозиториев) и Docker Compose. На YouTube доступно выступление специалистов Expedia с подробностями об их применении Docker в production. Кстати, в этом году лондонское подразделение Expedia выложило в GitHub свой образовательный курс по Docker для разработчиков, состоящий из 8 уроков.

Groupon


Сервис электронной торговли Groupon был одним из ранних пользователей Docker: ещё в 2014 году инженеры этой компании внедрили контейнеры для нужд непрерывной интеграции. В том же году на конференции DockerCon они представили свой Open Source-проект DotCi — плагин для Jenkins, упрощающий управление заданиями (со встроенной поддержкой Docker). Уже тогда он стал критически важным инструментом для управления процессами сборки и релизов, о чём говорил прессе технический директор Groupon.

PayPal


Всем известный сервис электронных платежей PayPal (обрабатывает 200+ платежей каждую секунду) использует частное облако OpenStack, в котором запущены более 100 тысяч виртуальных машин (в них работают все веб-приложения и сервисы). Стояла задача модернизации инфраструктуры с тем, чтобы сделать её более отзывчивой, безопасной и экономически эффективной. Как средство был выбран путь рефакторинга существующих приложений (на Java и C++) с целью их контейнеризации и удобного деплоя как в своё облако, так и в публичное (что может оказаться рентабельнее, чем поддержка собственной инфраструктуры). Результатом стало внедрение в 2014 году стека технологий Docker в production, включающего Docker Commercially Supported Engine (CS Engine), Docker Trusted Registry и Docker Compose. Контейнеры сосуществуют с виртуальными машинами и позволили значительно сократить общее количество ВМ, что привело к оптимизации инфраструктуры. Кроме того, скорость выката новых приложений значительно сократилась благодаря легковесности контейнеров (по сравнению с виртуализацией). В 2015 году инженеры PayPal пошли дальше, выступив на на конференции DockerCon SF c докладом (видео, презентация) о своей инфраструктуре в нескольких дата-центрах, CI с Jenkins и работе с Docker-образами. А в 2016 году на LinuxCon NA рассказали о том, что система CI в PayPal, использующая Git, Docker, Mesos, Jenkins, Aurora и Travis CI API, привела к 10-кратной экономии.

(Оркестровка Docker в PayPal)

The Washington Post


Популярное новостное издание The Washington Post имело сложности с растущим числом приложений, написанных на разных языках (Java, Scala, Node, Python, Go). Решив построить систему непрерывного деплоя для своей инфраструктуры на базе AWS, инженеры выбрали Docker Engine и Docker Compose. Текущее окружение насчитывает более 2500 Docker-контейнеров, которые полностью обслуживают и весь production, в том числе веб-сайт для онлайн-читателей (новости, мобильное приложение, мобильная версия сайта), их платформу для публикаций Arc Publishing и систему аналитики новостей.

Другие примеры


Среди прочих крупных пользователей Docker, указанных на сайте компании-разработчика, можно найти General Electric Appliances, New Relic, New York Times, Spotify, Uber, Yelp и Яндекс (речь про PaaS Cocaine). Кстати, о России. Использование Docker в российских компаниях/российскими инженерами — это тоже реальность. Вот несколько примеров:

  • взгляд Badoo на год использования Docker в production;
  • доклад про разработку и деплой сервисов с помощью Docker и Kubernetes в Avito;
  • доклад от Aviasales.ru про миграцию поискового движка в Docker;
  • а для разнообразия — впечатления от использования Docker в банке (от архитектора Альфа-Лаборатории, отдела особого назначения Альфа-Банка).

Кстати, если вы тоже применяете Docker в production — пожалуйста, расскажите об этом в комментариях. Уверен, что многим это будет очень интересно!


(Просмотр Docker-контейнеров через утилиту baDocker, созданную в Badoo)

Принятие в ИТ


Популярность и распространённость программных продуктов, особенно образующих инфраструктуру, определяется не только их клиентами, но и тем, как их поддерживают гиганты индустрии. И уж тут про Docker не заявил только ленивый. В частности (примеров, конечно, гораздо больше, поэтому только о главном):

  1. Docker интегрируется/поддерживается/обслуживается в Amazon Web Services, Google Cloud Platform, IBM Bluemix, Jelastic, Microsoft Azure, OpenStack, Oracle Container Cloud Service, VMware vSphere Integrated Containers…
  2. Поддерживается в системах управления конфигурациями: Ansible, CFEngine, Chef, Puppet, Salt.
  3. Red Hat не просто «поддерживает» Docker, но развивает свою платформу OpenShift (на базе Kubernetes), Canonical официально сотрудничает, для SUSE предлагается специальная подписка.
  4. Microsoft не ограничивается Azure, а недавно и вовсе купила Deis.


(Активная дружба Microsoft с Docker)

Особого внимания стоит растущая экосистема проектов, создаваемая индустрией: Kubernetes от Google, Tectonic и Quay от CoreOS, RancherOS, Apache Mesos и DC/OS, Contiv от Cisco… Наконец, упомяну широкое сотрудничество с некоммерческими организациями и проектами, такими как Cloud Foundry, Open Containers Initiative, Cloud Native Computing Foundation.

Итог


Docker действительно «выстрелил» и, не являясь какой-то сверхновой и сверхсложной технологией, пришёл в нужное время занять своё место в мире DevOps и CI/CD. Сами мы тоже используем его в production не один год, рассказываем о своём опыте и будем делать это впредь. Подписывайтесь на наш хаб, если вам это интересно :)
Поделиться с друзьями
-->

Комментарии (23)


  1. de1m
    20.04.2017 13:57

    Тут в другом месте интересовались про бэкапы, как вы их делаете? Что используете? Что сохраняете? Выключаете ли контейнеры для бэкапов?


    1. distol
      20.04.2017 14:03
      +2

      Если в контейнерах только стейтлесс приложения, там нечего бекапить. Зачем бекапить то, что перекатывается с нуля за секунды? Реджистри мы обычно используем файловы, бекапится он просто как директория с кучей файлов.


      Если же в контнейнерах данные, нужно бекапить сами данные. Мы для этого используем Bacula (точнее Bareos) с кучей обвязок, но тут нет однозначного ответа. Любой инструмент, который вы уже сейчас используете, скорей всего может быть адаптирован.


      1. de1m
        20.04.2017 14:08

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


  1. VolCh
    20.04.2017 16:24

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


    1. HiNeX
      20.04.2017 16:36

      Подводят, смысл «маленьким» компаниям пилить одинаковые статьи на хабру о том как они используют докер?)


      1. VolCh
        20.04.2017 16:53
        +2

        Не в статьях на хабре дело. Хотя для маленьких компаний полноценных мануалов по внедрению крайне мало, обычно просто введение как локально развернуть поиграться, либо общее описание архитектур на тысячи хостов.


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


        1. distol
          20.04.2017 18:08

          В целом да, все так, и тут появляемся такие мы, продавая shared-команду DevOps'ов небольшим компаниям.


          1. VolCh
            21.04.2017 10:21

            Интересно. Посмотрел ваш сайт и увидел вот что: "сервисы, которые не контейнеризируются: MySQL, MongoDB, RabbitMQ, Cassandra и Ceph;" Не знаю про контейнеризацию последних двух, но для первых трёх ведь существуют официальные и неофициальные образы. Или на практике не готовы поддерживать контейнеры с состоянием в продакшене?


            1. o_serega
              21.04.2017 18:23

              Про ceph https://github.com/ceph/ceph-docker, так же и сасандра, вопрос только как вы будите хранить персистент данные, но варианты есть


            1. distol
              22.04.2017 12:38
              +2

              Смысл в том, что:


              • идеально и без проблем контейнеризуются — stateless приложения,
              • можно контейнеризовать, но надо смотреть плюсы минусы в каждом конкретном случае:
                • statefull приложения, потеря данных в которых не критична (автозаполняемые кеши, например)
                • statefull приложения, которые сами умеют кластер с автовосстановлением данных И там не планируется хранить очень много данных (чтобы скорость восстановления узла не была слишком большой),
                • statefull приложения, которые могут комфортно существовать на сетевых дисках (ebs, rds и пр.) — для которых 1000 IOPS достаточно.
              • с трудом и с привлечением большой магии можно запихать в контейнеры большие statefull приложения (например посредством решений такого класса: https://habrahabr.ru/company/flant/blog/326414/).

              Самое важное! Положить в образ можно любой бинарник, в этом нет никакой проблемы. Запускать в Docker можно ЛЮБОЕ приложение, если речь идет об одном хосте — с этим тоже нет никакой проблемы. Однако, на одном хосте все можно и без Docker запустить, какая разница? Самое интересное и самое вкусное начинается, как только дело доходит до продакшена, которому требуются отказоустойчивость и горизонтальное масштабирование — и вот тут встает вопрос не о том, как что-то запихать в контейнер, а о том как сделать orchestration, self-healing, service discovery.


              Таким образом, на сайте у нас имеется ввиду, что в общем случае мы не рекомендуем передавать под управление statefull-сервисы в Kubernetes и считаем, что технологии еще не дозрели.


              Если чуть-чуть влезть в детали, например по MySQL, то по нашему мнению его можно передать под управление Kubernetes в следующих случаях:


              • хватает ebs/rds (хватает iops'ов) — просто один узел c MySQL и никаких проблем,
              • допустимо использовать Percona XtraDB Cluster И данных не слишком много (инфраструктура позволяет поднимать ноду в разумное время).


        1. LaSVyy
          22.04.2017 06:00

          Могу сказать, что даже в крупных компаниях мануалов мало)


    1. shurup
      21.04.2017 05:19

      Приведённые примеры компаний — естественно, крупные, потому что они известны и у них случились более яркие, интересные бизнес-кейсы. Про другие было бы здорово почитать в комментариях — добавил такой призыв в текст статьи: посмотрим, увидит ли и среагирует ли кто :-)

      А в общем — да, логично, что в первую очередь это крупные компании. Интересное в последних данных Datadog то, что к ним уже подтягиваются и «средние».


    1. alehano
      21.04.2017 08:05

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


      1. VolCh
        21.04.2017 10:46

        Не сложно базовые примеры повторить, а при попытках развернуть хотя бы дев-окружение локально по принципу "склонировал репу и запустил docker-compose up" c кучей проблем сталкиваешься. Навскидку:


        • проброс секретов в билдер, не используя нерекомендуемые способы (что-то в сварм моде появилось рекомендуемое, но он же не для локального разворачивания, а для кластеров)
        • то же уже в запущенный контейнер
        • синхронизация запуска, чтобы зависящий от БД контейнер запускался только когда СУБД готова принимать соединения
        • кэширование пакетов в билдере
        • разделение генерируемых при сборке приложения файлах между контейнерами (например, статику в контейнер с nginx, всё остальное в контейнер с php-fpm)
        • проблемы с правами при монтировании локальных каталогов
        • проброс DNS-имён на хост, чтобы резолвилось в браузере service1.local и service2.local на разные контейнеры
        • проброс DNS-сервера локальной сети в докер-контейнер (возможно специфично только для Ubuntu Desktop < 17.04), с учётом возможности подключения по VPN к сети, где свой DNS-сервер, которій должен динамически использоваться докер-демоном
        • работа с логами, не заточенных под докер приложений

        При работе с удаленную машину ещё больше проблем добавляется, т. к. папочки уже не примонтируешь. И єто только для дев- и тест-окружения.


        Поиск решений каждой из проблем может по несколько десятков часов занимать, если хочется чтобы новій разработчик только "склонировал репу и запустил docker-compose up", а при приеме мерж-реквеста на стейж-сервере разворачивался автоматически проект из пары десятков сервисов, у половины из которых своя СУБД.


  1. matabili1973
    20.04.2017 17:29

    Тестовый робот. Запустили посредством VBox, с использованием контейнеров, в которых запускается Ubuntu, NodeJS, и по-моему, на основе SeleniumWebdriver. Получившаяся связка позволяет отделу QA писать и скармливать роботу BD-тесты на русском языке.


  1. AntonL
    21.04.2017 05:07

    Имеем крупный проект. Используем Nutanix. Там вируталки. Зачем ещё внутри Docker?


    1. shurup
      21.04.2017 05:10

      Зависит от того, как их используете (как/что в них деплоите), и ваших потребностей (в частности — частота и скорость деплоя). В статье есть конкретный пример с переходом на Docker в случае PayPal, где как раз были только виртуалки.


    1. VolCh
      21.04.2017 07:42

      Если у каждой виртуалки единственная роль, если время от принятия решения (не важно, автоматически по данным мониторинга или людьми) о поднятии новой виртуалки до её реального включения в работу более чем устраивает, если утилизация ресурсов достаточно высока, то, навскидку, вам докер особо ни к чему.


    1. de1m
      21.04.2017 16:53

      всё упирается в ресурсы, с докером надо меньше ресурсов


    1. someoneisusingmyusualnick
      21.04.2017 20:45

      Например выиграть в цене.
      Один производительный инстанс и куча контейнеров могут выйти дешевле чем куча виртуалок.
      Во всяком случае, так было в ситуации моей компании.


  1. someoneisusingmyusualnick
    21.04.2017 20:43
    +1

    Компания крупная, все сайты крупные с кучей посещаемости. Переехали с виртуалок в openstack на aws + docker.

    www.mtv.com
    www.cc.com
    www.spike.com
    и еще несколько десятков хостов + куа + дев окружение для каждого продакшн хоста. Сэкономили весомое количество денег, выиграли в стабильности и еще ряде вещей.


    1. VolCh
      22.04.2017 12:15

      А что больше сыграло aws или docker? Ведь это никак не связано — можно докер на своем железе запускать, а можно с авс без докера работать.


      1. IanMoone
        25.04.2017 15:41

        Я думаю речь идет об Amazon EC2 Container Service