Docker 1.11 переведён на containerd и runC

Представлен релиз инструментария для управления изолированными Linux-контейнерами Docker 1.11, предоставляющего высокоуровневый API для манипуляции контейнерами на уровне изоляции отдельных приложений. В частности, Docker позволяет, не заботясь о формировании начинки контейнера, запускать произвольные процессы в режиме изоляции и затем переносить и клонировать сформированные для данных процессов контейнеры на другие серверы, беря на себя всю работу по созданию, обслуживанию и сопровождению контейнеров. Инструментарий базируется на применении встроенных в ядро Linux штатных механизмов изоляции на основе пространств имён (namespaces) и групп управления (cgroups). Код Docker написан на языке Go и распространяется под лицензией Apache 2.0.

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

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 на независимые слои упростило сопровождение продукта и существенно повысило его качество. Особое внимание было уделено производительности — задействование дополнительных механизмов межпроцессного взаимодействия не только не привело к замедлению работы, но и ускорило работу благодаря распараллеливанию создания контейнеров.

0_1460652817.png

Из других новшеств 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. В новой версии стабилизирована поддержка перепланировки, обеспечивающей автоматическое перемещение контейнера на рабочий узел в случае сбоя текущего узла.

© OpenNet