Docker представил Moby и LinuxKit для построения произвольных систем контейнерной изоляции
Компания Docker представила два новых проекта Moby и LinuxKit, предоставляющих инструменты для созданий произвольных систем контейнерной изоляции. Moby позволяет комбинировать готовые компоненты и фреймворки для создания систем на базе контейнеров, а LinuxKit предоставляет средства для формирования минимальной операционной системы для запуска контейнеров. Код написан на языке Go и распространяется (LinuxKit, Moby) под лицензией Apache 2.0.
Moby дает возможность манипулировать готовыми блоками для построения специализированными системы контейнерной изоляции по аналогии с конструктором Лего. Предоставляются различные варианты компонентов, охватывающих все аспекты работы систем контейнерной изоляции, включая ОС, runtime, средства оркестровки, инструменты управления инфраструктурой, сетевые подсистемы, хранилища, средства безопасности, сборочные инструменты и механизмы доставки образов. Каждый компонент оформлен в виде контейнера, поэтому создание новых компонентов производится через подготовку OCI-совместимых контейнеров.
Кроме коллекции компонентов, Moby также предлагает специальный инструментарий, который дает возможность собрать компоненты в форму, котовую для выполнения на выбранных архитектурах и платформах: для установки на конечное оборудование (x86, ARM), в виде исполняемых файлов для Linux, macOS и Windows или образов виртуальных машин для популярных облачных платформ и систем виртуализации. Завершающим звеном является набор эталонных схем компоновки, которые можно использовать в качестве шаблона для связывания компонентов в рабочую систему.
Потребителю предоставляются гибкие возможности для экспериментов и подбора оптимальной конфигурации - каждый компонент в шаблоне можно заменять на один из предлагаемых альтернативных вариантов. Например, можно выбрать технологию изоляции или систему оркестровки. Пользователи Moby получают возможность не ограничиваться рамками конкретных продуктов и построить свою инфраструктуру для запуска контейнеров комбинируя разные подходы с учетом всех своих пожеланий.
LinuxKit дополняет Moby и представляет собой тулкит для сборки защищенных, переносимых и компактных операционных систем для Linux-контейнеров. При помощи LinuxKit администратор может сформировать образ ОС, содержащий только минимальный набор компонентов, необходимых для запуска контейнеров. Конфигурация определяется в виде YAML-спецификации, на основе которой LinuxKit может подготовить загрузочный образ. В спецификации указывается ядро, процесс инициализации, список контейнеров для запуска, набор системных сервисов, дополнительные файлы для включения в сборку и формат вывода (например, ISO).
В качестве основы используются компоненты пространства пользователя дистрибутива Alpine Linux, в том числе системной библиотеки Musl, набора утилит BusyBox. Для повышения безопасности испльзуются патчи PaX и SSP (Stack Smashing Protection). Системные компоненты написаны на безопасных языках Rust, Go или OCaml и выполняются в режиме максимальной изоляции, благодаря сборке в виде самодостаточных "unikernel", продвигаемых проектом MirageOS. По мере развития все больше системных компонентов будут переписываться из Си на безопасные языки и поставляться в форме unikernel.
Особенности LinuxKit:
- Ориентация на предоставление максимальной безопасности по умолчанию, без негативного влияния на удобство работы;
- Все составные части заменяемы и настраиваемы;
- Постоянная инфраструктура для сборки Linux-дистрибутивов;
- Работа без сохранения состояния (stateless), но с возможностью подключения отдельного постоянного хранилища;
- Простой инструментарий и простые средства интеграции;
- Построение на основе контейнеров и для выполнения контейнеров;
- Рассчитан на сборку и выполнение кластерных приложений, но без привязки к конкретным средствам оркестровки, таким как Docker или Kubernetes;
- Создан в процессе разработки Docker Editions, но преобразован в тулкит общего назначения;
- Рассчитан на использования внешних управляющих инструментариев, таких как Infrakit.
Docker намерен перевести все свои открытые проекты в проект Moby, в том числе разбить движок на серию компонентов, отделить интерфейс пользователя и SDK, открыт новые инструменты, используемые в процессе работы над платформой Docker и внедрить сфокусированную на сообществе модель управления, структура которой будет напоминать Fedora для достижения оптимального баланса между интересами сообщества и корпоративного спонсора.