Docker представил Moby и LinuxKit для построения произвольных систем контейнерной изоляции


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

Moby даёт возможность манипулировать готовыми блоками для построения специализированных систем контейнерной изоляции, создавая результирующую систему по кирпичикам по аналогии с конструктором Лего. Предоставляются различные варианты компонентов, охватывающих все аспекты работы систем контейнерной изоляции, включая ОС, runtime, средства оркестровки, инструменты управления инфраструктурой, сетевые подсистемы, хранилища, средства безопасности, сборочные инструменты и механизмы доставки образов. Каждый компонент оформлен в виде контейнера, поэтому создание новых компонентов производится через подготовку OCI-совместимых контейнеров.

Кроме коллекции компонентов, Moby также предлагает специальный инструментарий, который даёт возможность собрать компоненты в форму, готовую для выполнения на выбранных архитектурах и платформах: для установки на конечное оборудование (x86, ARM), в виде исполняемых файлов для Linux, macOS и Windows или образов виртуальных машин для популярных облачных платформ и систем виртуализации. Завершающим звеном является набор эталонных схем компоновки Moby Origin, которые можно использовать в качестве шаблона для связывания компонентов в рабочую систему. В частности, доступен шаблон для формирования из компонентов Moby типовой системы Docker.

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

LinuxKit дополняет Moby и представляет собой тулкит для сборки защищённых, переносимых и компактных операционных систем для Linux-контейнеров. При помощи LinuxKit администратор может сформировать образ ОС, содержащий только минимально необходимый набор компонентов, достаточных для запуска контейнеров. Все системные сервисы в LinuxKit оформлены в виде контейнеров и могут быть заменены или удалены. Минимальный размер сборки, достаточной для запуска контейнеров - 35 Мб.

Конфигурация сборки определяется в виде YAML-спецификации, на основе которой LinuxKit может подготовить загрузочный образ. В спецификации указывается ядро, процесс инициализации, список контейнеров для запуска, набор системных сервисов, дополнительные файлы для включения в сборку и формат вывода (например, ISO). В качестве основы используются компоненты пространства пользователя дистрибутива Alpine Linux, в том числе системной библиотеки Musl.

Для повышения безопасности используются патчи PaX и SSP (Stack Smashing Protection, -fstack-protector), а для полноценного использования ASLR при сборке формируются исполняемые файлы PIE (Position-Independent Executable). В перспективе планируется переписать системные компоненты на безопасных языках Rust, Go или OCaml и выполнять их в режиме максимальной изоляции, благодаря сборке в виде самодостаточных "unikernel", развитием которых занимался перешедший в руки Docker проект MirageOS. Пока на базе unikernel реализован только сервис dhcp, но по мере развития всё больше системных компонентов будут переписываться из Си на безопасные языки и поставляться в форме unikernel.

Особенности LinuxKit:

-Ориентация на предоставление максимальной безопасности по умолчанию, без негативного влияния на удобство работы;
-Все составные части могут быть заменены и перенастроены;
Постоянная инфраструктура для сборки Linux-дистрибутивов;
-Работа без сохранения состояния (stateless), но с возможностью подключения отдельного постоянного хранилища;
-Простой инструментарий и простые средства интеграции;
-Построение на основе контейнеров и для выполнения контейнеров;
-Рассчитан на сборку и выполнение кластерных приложений, но без привязки к конкретным средствам оркестровки, таким как Docker или Kubernetes;
-Создан в процессе разработки Docker Editions, но преобразован в тулкит общего назначения;
-Рассчитан на использования внешних управляющих инструментариев, таких как Infrakit.
-Docker намерен перевести все свои открытые разработки в проект Moby, в том числе разбить движок на серию компонентов, отделить интерфейс пользователя и SDK, открыть новые инструменты, используемые в процессе работы над платформой Docker. Также планируется внедрить сфокусированную на сообществе модель управления, структура которой будет напоминать Fedora для достижения оптимального баланса между интересами сообщества и корпоративного спонсора.