Docker Платформа распределённых приложений

Продукт
Разработчики: Docker, Inc
Дата премьеры системы: 2013/03/13
Дата последнего релиза: 2019/10/17
Технологии: PaaS - Platform As A Service - Бизнес-платформа как сервис,  Виртуализация,  Средства разработки приложений

Содержание

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

Платформа создана на принципе контейнерной виртуализации или виртуализации на уровне операционной системы.

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

В составе системы Docker Engine - компактный, легкий в работе инструмент упаковки, и Docker Hub, облачный сервис для обмена приложениями и автоматизации рабочих процессов.

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

Продукт распространяется как свободное программное обеспечение под лицензией Apache 2.0. Написан на языке Go.

История

  • Проект начат в 2008 году, как внутренняя разработка компании dotCloud, с целью создания публичной PaaS-платформы с поддержкой различных языков программирования.

  • В марте 2013 года код Docker опубликован под лицензией Apache 2.0. В октябре 2013 года подчёркивая смещение фокуса к новой ключевой технологии, dotCloud переименована в Docker (PaaS-платформа сохранена под названием — dotCloud).

  • В октябре 2013 года выпущен релиз Havana тиражируемой IaaS-платформы OpenStack, в котором реализована поддержка Docker (как драйвер для OpenStack Nova).

  • С ноября 2013 года частичная поддержка Docker включена в дистрибутив Red Hat Enterprise Linux версии 6.5, полная — в 20 версию дистрибутива Fedora, ранее достигнуто соглашение с Red Hat о включении с 2014 года Docker в тиражируемую PaaS-платформу Open Shift.

  • В декабре 2013 года объявлено о поддержке развёртывания Docker-контейнеров в среде Google Compute Engine.

  • С 2014 года ведутся работы по включению поддержки Docker в среду управления фреймворка распределённых приложений Hadoop; по результатам тестирования вариантов платформы виртуализации для Hadoop, проведённом в мае 2014 года, Docker показал на основных операциях (по массовому созданию, перезапуску и уничтожению виртуальных узлов) существенно более высокую производительность, нежели KVM, в частности, на тесте массового создания виртуальных вычислительных узлов прирост потребления процессорных ресурсов в Docker зафиксирован в 26 раз ниже, чем в KVM, а прирост потребления ресурсов оперативной памяти — втрое ниже.

2019: Обнаружение червя для криптоджекинга, распространяющегося с помощью контейнеров Docker

17 октября 2019 года стало известно о том, что команда исследователей из Unit 42 компании Palo Alto Networks обнаружили, по их словам, первый червь для криптоджекинга, распространяющийся с помощью контейнеров Docker.

Обнаружение червя для криптоджекинга, распространяющегося с помощью контейнеров Docker

Как сообщалось, вредоносное ПО, получившее название Graboid, загружается с C&C-серверов и предназначено для майнинга криптовалюты Monero. Для распространения червь периодически запрашивает у C&C-сервера информацию об уязвимых хостах и случайным образом выбирает следующую цель. По словам исследователей, в среднем каждый криптомайнер активен на протяжении 63% времени, а периоды майнинга составляют 250 с.

В ходе анализа вредоносной кампании было обнаружено 2 тыс. подключенных к Сети установок Docker с отсутствующим механизмом авторизации, что позволяет злоумышленнику получить полный контроль над движком Docker (Community Edition) и хостом.

В ходе атаке киберпреступник может скомпрометировать незащищенный демон Docker, после чего запустить вредоносный контейнер из Docker Hub, получить скрипты и список уязвимых хостов от C&C-сервера, а затем повторить операцию для атаки на следующую цель.

Graboid включает в себя функции как червя, так и майнера криптовалюты. Каждый раз вредонос случайным образом выбирает три цели, устанавливает червь на первой, останавливает работу майнера на второй и запускает его на третьей, создавая непредсказуемое поведение. Вредоносный контейнер не запускается сразу после взлома хоста, а ожидает, когда другой скомпрометированный хост начнет процесс майнинга.

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

поясняют исследователи Palo Alto Networks
»

По словам исследователей, вредоносный образ Docker (pocosow/centos) на октябрь 2019 года был загружен более 10 тыс. раз из Docker Hub. Контейнер для майнинга криптовалюты, который размещает червь (gakeaws/nginx), был загружен более 6500 раз. Исследователи также обнаружили, что пользователь gakeaws опубликовал второй образ криптоджекинга (gakeaws/mysql), который имеет идентичное содержание с gakeaws/nginx.[1]

2017

Поддержка Kubernetes

17 октября 2017 года компания Docker объявила об официальной поддержке Kubernetes в своей платформе [2].

Согласно видению разработчиков, программная платформа Docker состоит из четырёх слоёв:

  1. исполняемой среды для запуска контейнеров containerd (соответствует стандарту от OCI, Open Container Initiative),
  2. инструмента оркестровки Swarm («превращает группу узлов в распределённую систему»),
  3. Docker Community Edition (реализация простого рабочего процесса по сборке и доставке приложений в контейнерах),
  4. Docker Enterprise Edition (безопасное управление контейнерами в production).

Все эти слои собираются из Open Source-компонентов посредством проекта Moby.

Работа в Moby над поддержкой Kubernetes для Docker ведётся более года и включает в себя необходимые изменения в Open Source-проектах containerd и cri-containerd, LinuxKit, InfraKit, libnetwork, Notary, libentitlement.

В качестве дистрибутива Kubernetes, интегрируемого с Docker, будет использоваться основная community-сборка проекта, официально выпускаемая некоммерческой организацией CNCF.

Docker Enterprise Edition

3 марта 2017 года компания Docker заявила о выпуске Docker Enterprise Edition (EE) - коммерческой платформы Docker, ориентированной на создание и управление контейнерами, масштабирования гибридных облачных сред. В составе продукта среда исполнения, инструменты оркестровки контейнеров, средства управления и обеспечения безопасности.

Представление Docker Enterprise Edition, (2017)

Одновременно компания инициировала программу сертификации, которая позволит сторонним разработчикам размещать свои приложения в Docker Store. Docker сертифицировала EE для работы с дистрибутивами [3]:

EE работает в облачных средах AWS и Azure.

Платформа представлена тремя редакциями: базовая, стандартная и расширенная. В базовой версии предлагается сертификация инфраструктуры и поддержка. Сертифицированные контейнеры и плагины доступны в Docker Store. Стандартная версия дополнена многопользовательской поддержкой c возможностью изолированно обслуживать разных пользователей, например подписчиков SaaS, в рамках одного сервиса. В рамках этой редакции предлагаются дополнительные инструменты для управления контейнерами и их образами; средства обеспечения безопасности адаптированы для работы в ЦОДах. Расширенная версия комплектуется антивирусом и инструментом для мониторинга уязвимостей.

Docker 1.13

19 января 2017 года компания Docker сообщила о выпуске релиза Docker 1.13. В составе релиза функции для создания контейнеров, управления ими и обеспечения их безопасности. Добавлены команды, с помощью которых можно организовать эффективное использование дискового пространства контейнерами.

Команда «docker system prune» удаляет неиспользуемые данные, команда «docker system df» показывает пользователю объем занятого пространства на заданном диске.

Реклама Docker 1.13, (2017)
Реклама Docker 1.13, (2017)

Функция сжатия squash помогает эффективнее работать с местом на диске контейнерам Docker. Она выполнена в виде экспериментальной опции к команде «docker build». Использование squash обеспечивает коллапс (сжатие) множественных слоёв файловой системы, образующихся в процессе создания контейнера, в единый слой.

В релизе Docker 1.12, в июне 2016-го, была возможность интеграции средства оркестровки контейнеров Swarm непосредственно в движок Docker. В обновлении Docker 1.13 режим работы со Swarm дополнительно усовершенствован.

Посредством стандартной команды «docker-compose» в версии 1.13 пользователь может развернуть сервис Swarm и управлять им, задавать требуемое количество экземпляров (узлов) для каждого сервиса. В режиме Swarm появилось улучшение: он интегрирован с Secret Management API (API для управления секретными данными), при помощи которого можно безопасно хранить и извлекать конфиденциальные данные, используемые в сервисах Docker.

В терминологии сервисов Docker Swarm понятие "секрет" (secret) представляет собой объект данных, например, пароль, личный ключ SSH, SSL-сертификат или другой набор данных, которые нельзя передавать по сети или хранить в незашифрованном виде в Dockerfile или в исходном коде вашего приложения. Начиная с версии Docker 1.13 при помощи секретов Docker этими данными можно управлять централизованно и безопасным образом передавать их только в те контейнеры, в которых есть необходимость в этих данных.

В состав релиза вошла пары инкрементных обновлений технологий мандатного управления доступом в Linux, в частности SELinux (Security Enhanced Linux) и AppArmor. Помимо этого, в версию 1.13 перейдут исправления безопасности, сделанные в релизе 1.12.6, выпущенном 10 января 2017 года. В нем закрыта дыра в безопасности с кодом CVE-2106-9962, суть которой описана как «небезопасное открытие дескриптора файла позволяет повысить уровень привилегий» — она допускала утечку данных из контейнера.

2016: Docker 1.11

14 апреля 2016 года Docker, Inc представила релиз инструментария для управления изолированными Linux-контейнерами Docker 1.11. В рамках версии предоставляется высокоуровневый API для манипуляции контейнерами на уровне изоляции отдельных приложений[4].

Docker 1.11 перешел на легковесный runtime runC и управляющий инструментарий containerd, совместимые со спецификациями OCI (Open Container Initiative), определяющими единый формат контейнеров и универсальную среду окружения для их запуска.

runC предоставляет обособленный набор компонентов для запуска контейнеров на широком спектре систем, позволяя обойтись без внешних зависимостей, так как поддержка различных технологий изоляции встраивается в runtime контейнера. Для организации работы с контейнерами runC поддерживает пространства имён Linux (namespaces), различные средства повышения безопасности Linux (SELinux, Apparmor, seccomp, cgroups, capability, pivot_root, сброс uid/gid), live-миграцию (используется CRIU), возможности создания контейнеров в Windows 10, поддержку интеграции с systemd и переносимые профили производительности (предоставлены Google).

Containerd включает фоновый процесс и клиент командной строки, использующий runC для запуска контейнеров, соответствующих спецификации OCI. Из расширенных возможностей containerd отмечается поддержка seccomp, непривилегированных контейнеров (user namespace), применение criu для клонирования и live-миграции. При одновременном запуске 1000 контейнеров containerd обеспечивает производительность запуска в 126-140 контейнеров в секунду.

Движок Docker работает в качестве надстройки над containerd, что позволяет сохранить привычный для пользователей Docker интерфейс. Интеграция containerd существенно упростила кодовую базу Docker и избавила от ряда проблем. Разделение Docker на независимые слои упростило сопровождение продукта и существенно повысило его качество. Особое внимание было уделено производительности - задействование дополнительных механизмов межпроцессного взаимодействия не только не привело к замедлению работы, но и ускорило работу благодаря распараллеливанию операций создания контейнеров.

Представление параллелизма обработки (2016)
Представление параллелизма обработки (2016)


Изменения в Docker 1.11

  • Поддержка балансировки нагрузки через распределение запросов к контейнерам в режиме "round robin" с использованием DNS;
  • Экспериментальная поддержка VLAN в сетевой инфраструктуре контейнеров;
  • Возможность использования аппаратных устройств Yubikey для формирования цифровых подписей для образов контейнеров;
  • Поддержка привязки произвольных меток в формате ключ/значение к сетям и дисковым разделам по аналогии с привязкой меток к контейнерам и образам;
  • Улучшена обработка состояния нехватки дискового пространства в хранилищах на базе device mapper;
  • Выпуск инструмента Docker Compose 1.7, позволяющего организовать работу распределённого на несколько хостов приложения, в работу которого вовлечено несколько контейнеров, запущенных в кластере на базе Docker Swarm. В новой версии добавлен команда "docker-compose exec" (аналог "docker exec") и опция "--build" для команды "docker-compose up", инициирующая предварительный запуск "docker-compose build";
  • Выпуск инструмента Machine 0.7, предназначенного для быстрого развёртывание хостов в гостевых окружениях систем виртуализации VirtualBox, VMware, AWS, Digital Ocean и Microsoft Azure. Осуществляет создание начинки сервера, установку на него Docker и настройку клиента для работы с данным сервером. В новой версии драйвер Microsoft Azure переведён на новый Azure API;
  • Выпуск инструмента Swarm 1.2, предоставляющего средства кластеризации для упакованных в контейнеры приложений. Swarm даёт возможность управлять кластером из нескольких хостов Docker (например, созданных с использованием Docker Machine) в форме работы с одним виртуальным хостом. Так как Swarm использует штатный Docker API, он может применяться для управления и другими поддерживающими данный API инструментами, такими как dokku, fig, krane, flynn, deis, docker-ui, shipyard, drone.io, Jenkins. В новой версии стабилизирована поддержка перепланировки, обеспечивающей автоматическое перемещение контейнера на рабочий узел в случае сбоя текущего узла.

2015: Выпущен релиз Docker 1.8

12 августа 2015 года компания Docker представила релиз инструментария Docker 1.8. Продукт содержит высокоуровневый API для управления контейнерами на уровне изоляции отдельных приложений[5].

Разработчики Docker отметили возможность продукта запускать произвольные процессы в режиме изоляции и затем переносить и клонировать сформированные для данных процессов контейнеры на другие серверы, не заботясь о формировании начинки контейнера, беря на себя всю работу по созданию, обслуживанию и сопровождению контейнеров. Код Docker написан на языке Go и распространяется под лицензией Apache 2.0.

Схема взаимодействия, 2015

Инструментарий основан на использование встроенных в ядро Linux штатных механизмов изоляции на основе пространств имён (namespaces) и групп управления (cgroups). Для создания контейнеров предлагается использовать libcontainer (обёртка над namespaces и cgroups), также возможно применение lxc, libvirt, systemd-nspawn, OpenVZ контейнеров с помощью библиотеки LibCT и других систем изоляции. Для формирования контейнера достаточно загрузить базовый образ окружения (docker pull base), после чего можно запускать в изолированных окружениях произвольные приложения (например, для запуска bash можно выполнить "docker run -i -t base /bin/bash").


Наиболее заметные инновации в Docker 1.8:

  • Функциональность Docker Content Trust для проверки достоверности образа контейнера по цифровой подписи, позволяет удостовериться, что образ размещён в репозитории заявленным издателем. Для верификации используется система открытых ключей, при которой образ подписывается закрытым ключом издателя, а затем может быть проверен при помощи публично доступного открытого ключа. Для публикации, верификации и безопасного обновления образов в Docker интегрирован инструментарий Notary, основанный, в свою очередь, на фреймворке The Update Framework (TUF). Проверка осуществляется автоматически при выполнении типовых команд, таких как docker pull, docker push, docker build, docker create и docker run;

  • Представлен Docker Toolbox, специализированный инсталлятор для Windows и OS X, упрощающий развёртывание и запуск окружения разработчика Docker. Docker Toolbox позиционируется как замена Boot2Docker и включает клиентское ПО для Docker, компоненты Machine и Compose, а также систему виртуализации VirtualBox;

  • В разряд стабильных переведена добавленная в прошлом выпуске экспериментальная система для подключения плагинов, выполняемых в форме отдельных процессов-обработчиков. В разряд стабильный также переведены плагины для организации хранилищ, например, позволяющие работать с сетевыми хранилищами, такими как Flocker, Blockbridge, Ceph, ClusterHQ, EMС и Portworx;

  • Система драйверов для ведения логов, позволяющих реализовать различные схемы сохранения системного журнала, в том числе передачи логов контейнера на внешний syslog-сервер, расширена возможностью передачи логов в системы Graylog и Fluentd. Добавлен драйвер для организации ротации логов на диске;

  • Команда "docker cp" теперь может применяться не только для копирования файлов из контейнера на хост-систему, но и наоборот. Например, "docker cp foo.txt mycontainer:/foo.txt";

  • Для запуска демона Docker представлена новая команда "docker daemon", которую следует использовать вместо опции "-d". Новая команда позволяет явно разделить клиентские опции (docker --help) и опции демона (docker daemon --help);

  • Возможность настройки формата вывода команды "docker ps" через указание опции "--format";

  • Поддержка настройки директории с файлами конфигурации клиента через указание пути в опции --config или переменной окружения DOCKER_CONFIG, что даёт возможность запустить разные экземпляры docker с разными наборами конфигурации;

  • Выпуск инструмента Machine 0.4, предназначенного для быстрого развёртывание хостов в гостевых окружениях систем виртуализации VirtualBox, VMware, AWS, Digital Ocean и Microsoft Azure. Осуществляет создание начинки сервера, установку на него Docker и настройку клиента для работы с данным сервером. В новой версии добавлены средства настройки движка для использования http-прокси;

  • Выпуск инструмента Swarm 0.4, предоставляющего средства кластеризации для упакованных в контейнеры приложений. Swarm даёт возможность управлять кластером из нескольких хостов Docker (например, созданных с использованием Docker Machine) в форме работы с одним виртуальным хостом. Так как Swarm использует штатный Docker API, он может применяться для управления и другими поддерживающими данный API инструментами, такими как dokku, fig, krane, flynn, deis, docker-ui, shipyard, drone.io, Jenkins. В новой версии улучшена реализация встроенного планировщика и драйвера для интеграции с Mesos (теперь можно использовать инструменты docker для управления кластером Mesos);

  • Выпуск инструмента Docker Compose 1.4, позволяющего организовать работу распределённого на несколько хостов приложения, в работу которого вовлечено несколько контейнеров, запущенных в кластере на базе Docker Swarm. В этой версии значительно увеличена скорость запуска и остановки приложений, пересоздание контейнера производится только при необходимости, обеспечено параллельное выполнение работ. Добавлена возможность назначения произвольных имён контейнерам и поддержка чтения конфигурации из стандартного ввода (можно генерировать файл конфигурации на лету);

2014

Microsoft портирует Docker на Windows Server и Windows Azure

22 октября 2014 года Microsoft сообщила о предстоящем переносе кода платформы Docker на Windows Server и Windows Azure.

Платформа Docker разработана для операционной системы Linux и использует возможности контейнерной виртуализации, глубоко интегрированные в Linux-ядро. Портировать такое ПО на Windows - непростая задача, однако Microsoft собирается сделать это. Компания заявила о намерении поддержать и финансировать усилия Open Source-разработчиков и реализовать поддержку API Docker в своем облачном сервисе Windows Azure.

В июне 2014 года появилась возможность запуска Docker-хостов на Windows Azure. Пользователь может создать в облаке Microsoft виртуальную машину, установить на нее Linux, запустить среду Docker и в ней - свои приложения. Однако, компания стремится обеспечить запуск задач на Windows-хостах, как в облаке Azure, так и в любых других публичных и частных средах.

Аналитики отметили стремление компании называть эту технологию "контейнерами Windows", тем самым отмечая вероятность существенного отличия внутреннего устройства Windows-версии Docker от оригинала. Однако, компания обещает - все приложения, запускаемые в среде Docker на 22 октября 2014 года, будут работать в окружении Windows.

На 22 октября 2014 года в виртуальной среде Docker можно запустить 45 тыс. готовых образов различных приложений.

Open Source сообщество отметило особенность, которая стала, в некотором смысле, победой сообщества: для обеспечения поддержки Docker внутри Windows будут, по сути, реализованы ключевые особенно ядра Linux.

Docker 1.3.2: исправлены критические ошибки

Осенью 2014 года состоялся выход внеочередного обновления открытой системы управления контейнерной виртуализацией Docker 1.3.2, вызванный необходимостью исправления двух ошибок, получивших статус критических. Обнаруженные уязвимости позволяли злоумышленнику получить доступ к файловой системе хост-машины за пределами контейнера, что крайне опасно[6].

Первой уязвимости был присвоен идентификатор CVE-2014-6407. Она позволяет злоумышленнику переместить файлы из контейнера в файловую систему хост-машины используя команды docker pull или docker load. Это возможно из-за ошибки при обработке жёстких и символических ссылок в программе извлечения данных из образа контейнера. В результате злоумышленник сможет выполнить в хост-системе произвольный код и изменить собственные права доступа.

Ошибка содержится во всех предыдущих версиях Docker. Таким образом, обновление является обязательным.

Вторая уязвимость имеет идентификатор CVE-2014-6408. Ошибка позволяет игнорировать ограничения, заданные для изолированного контейнера, что также позволяет злоумышленнику выйти за его пределы. Это связано с тем, что пользователь имеет возможность присвоить образу собственные параметры безопасности и изменить общий профиль безопасности для всех контейнеров, опирающихся на аналогичный образ.

Ошибка найдена в выпусках с номерами 1.3.0 и 1.3.1. Так что, на практике и тут обновления носит обязательный характер — вряд ли кто-то использует более ранние выпуски.

Примечания

Ссылки

1. Docker

2. Microsoft пообещала открытую платформу виртуализации приложений



РЕШЕНИЕ НА БАЗЕ (1) СМ. ТАКЖЕ (55)
Название решенияРазработчикКоличество
проектов
Virtuozzo Storage for DockerVirtuozzo (Parallels) Виртуоззо Рисерч0


Распределение вендоров по количеству проектов внедрений (систем, проектов) с учётом партнёров

За всю историю
2016 год
2017 год
2018 год
Текущий год

  VMware (139, 152)
  Citrix Systems (21, 49)
  Microsoft (19, 39)
  IBM (48, 34)
  Крок (1, 24)
  Другие (307, 161)

  VMware (4, 8)
  Крок (1, 4)
  Код Безопасности (1, 4)
  Microsoft (1, 3)
  Citrix Systems (2, 2)
  Другие (10, 12)

  VMware (8, 21)
  Крок (1, 4)
  Veeam Software (2, 2)
  Код Безопасности (1, 2)
  Microsoft (1, 2)
  Другие (12, 14)

Распределение базовых систем по количеству проектов, включая партнерские решения

За всю историю
2016 год
2017 год
2018 год
Текущий год

Распределение вендоров по количеству проектов внедрений (систем, проектов) с учётом партнёров

За всю историю
2016 год
2017 год
2018 год
Текущий год

  Microsoft (98, 135)
  Техносерв (2, 27)
  Oracle (48, 20)
  Онланта (2, 16)
  Сервионика (5, 12)
  Другие (227, 78)

  Microsoft (2, 10)
  Oracle (2, 3)
  Онланта (1, 2)
  HPC HUB (1, 2)
  SkyparkCDN (1, 2)
  Другие (7, 7)

  Microsoft (2, 7)
  Техносерв (1, 6)
  Онланта (1, 4)
  HPC HUB (1, 2)
  Сервионика (1, 2)
  Другие (4, 4)

Распределение базовых систем по количеству проектов, включая партнерские решения

За всю историю
2016 год
2017 год
2018 год
Текущий год