Apple выпускает альтернативу Docker на базе Swift для macOS

Apple представила основанную на Swift альтернативу Docker с открытым исходным кодом для запуска контейнеров Linux на macOS, ориентированную на безопасность и изоляцию.
Компания Apple незаметно выпустила новый проект с открытым исходным кодом, который может существенно изменить способ запуска контейнеров в macOS. Проект под простым названием «Контейнер» представляет собой среду выполнения контейнеров на базе Swift, разработанную специально для систем macOS, особенно для тех, которые работают на Apple Silicon.
По сути, container
позволяет пользователям извлекать, создавать, запускать и публиковать стандартные контейнеры Linux, совместимые с OCI. Однако, в отличие от Docker, который обычно использует общую виртуальную машину для всех контейнеров в macOS, подход Apple заключается в том, что каждый контейнер запускается на собственной облегчённой микровиртуальной машине с изолированным ядром Linux и сетевым стеком. Согласно странице проекта на GitHub:
Этот инструмент потребляет и создаёт образы контейнеров, совместимые с OCI, поэтому вы можете извлекать и запускать образы из любого стандартного реестра контейнеров. Вы также можете отправлять созданные вами образы в эти реестры и запускать их в любом другом приложении, совместимом с OCI.
Эта модель отражает концепцию микровиртуальных машин, популяризированную такими инструментами, как Firecracker, но она была тесно интегрирована в macOS с помощью Virtualization.framework, встроенного гипервизора Apple.
Хотя Apple не позиционирует этот инструмент как полноценную замену Docker, он во многом повторяет его возможности для локальной разработки. Интерфейс командной строки знаком и удобен: с такими командами, как container image pull alpine
или container run -ti alpine sh
.
Что отличает этот инструмент от других, так это его бесшовная интеграция в саму операционную систему macOS. Вместо того чтобы эмулировать среду Linux с помощью внешних инструментов, решение Apple использует Swift для большей части пользовательского интерфейса, включая крошечную систему инициализации под названием vminitd, которая загружает контейнеры за миллисекунды.
Проект также включает в себя пакет Swift «Containerization», который предоставляет низкоуровневые API для управления образами, томами, сетями и процессами загрузки, предоставляя опытным пользователям и разработчикам инструментов мощную основу.
Ладно, пока всё хорошо, но теперь позвольте мне поделиться с вами несколькими своими мыслями на эту тему. Честно говоря, я немного озадачен этим шагом Apple. И сейчас я объясню почему.
Во-первых, давайте проясним один момент: не существует такой вещи, как настоящая нативная контейнеризация в какой-либо операционной системе, кроме Linux, и на то есть простая причина. Docker использует функции ядра Linux, такие как контрольные группы, пространства имён и наложенные файловые системы, которые ядро macOS не может предоставить.
По этой причине в новом проекте Apple для запуска каждого отдельного контейнера используется отдельная облегчённая виртуальная машина Linux. В то же время подход Docker заключается в том, чтобы запускать всё внутри одной виртуальной машины (созданной с помощью LinuxKit), на которой размещается Docker Engine и все контейнеры.
Итак, в случае с Apple каждый контейнер находится в отдельной виртуальной машине, а это означает множество виртуальных машин (независимо от того, насколько они легковесны), что кажется не самым эффективным подходом.
С другой стороны, у отдельных виртуальных машин есть свои преимущества. Например, одним из ключевых преимуществ нового проекта Apple является то, что каждый контейнер имеет собственное выделенное ядро Linux, в отличие от Docker, который использует одно ядро для всех контейнеров (вы не можете смешивать версии ядра в каждом контейнере).
Кроме того, он также использует собственный сетевой стек macOS, в то время как Docker обычно полагается на виртуальную машину с NAT или мостовой сетью. Чтобы было понятнее, я составил краткую сравнительную таблицу:
Особенность | Рабочий стол Docker | Контейнер для Яблок |
---|---|---|
Модель виртуальной машины | Общая виртуальная машина для всех контейнеров | Микро‑VM на контейнер |
Ядро | Единое ядро Linux для всех | Выделенное ядро Linux для каждого контейнера |
База | Использует Docker Engine и гипервизор (например, qemu или HyperKit) | Используется собственная платформа виртуализации Apple. |
Создание сетей | NAT или мост через виртуальную машину | Собственный сетевой стек macOS (с ограничениями в ранних версиях) |
Время выполнения | runc / контейнер | vminitd — пользовательская система инициализации Swift |
Интеграция | Кроссплатформенный и ориентированный на контейнеры | Полностью адаптировано для macOS и ориентировано на Swift |
Несмотря на все различия, основная идея в обоих случаях одна и та же: создание, запуск и работа с образами контейнеров, совместимыми с OCI. С этой точки зрения Docker по-прежнему предлагает гораздо больше гибкости и возможностей, чем новый проект Apple.
Например, пока ещё нет эквивалента docker-compose
и экосистемы инструментов (например, нет панели управления с графическим интерфейсом, ограничена оркестрация) — всё это ещё предстоит разработать и улучшить.
Итак, мне интересно, почему Apple приложила столько усилий для создания этого продукта. Помимо надписи «Сделано Apple», они, похоже, хотят получить свою долю в этой обширной нише, в которой почти полностью доминирует Docker, предлагая более качественную интеграцию с macOS, используя системные API вместо сторонних демонов и, в конечном счёте, улучшая изоляцию для обеспечения безопасности, что сокращает поверхность атаки.
Поскольку проект всё ещё находится на ранней стадии разработки, будет интересно посмотреть, как он будет развиваться и сможет ли он оправдать ожидания Apple, в конечном итоге заменив Docker или Podman в качестве основного инструмента для разработчиков на macOS.
Редактор: Анастасия Богатырчук