Об этом проекте
Containerization — это пакет Swift от Apple, который позволяет приложениям запускать Linux-контейнеры на macOS. Он построен на основе Virtualization.framework от Apple на Apple silicon и предоставляет набор API для полного жизненного цикла контейнеров.
Основные возможности включают управление OCI-образами и взаимодействие с удаленными реестрами, создание и заполнение файловых систем ext4, взаимодействие с семейством сокетов Netlink, сборку оптимизированного ядра Linux для быстрой загрузки, запуск легковесных виртуальных машин и управление средой выполнения, запуск и взаимодействие с контейнерными процессами, а также использование Rosetta 2 для запуска контейнеров linux/amd64 на Apple silicon.
С точки зрения дизайна, каждый Linux-контейнер работает внутри собственной легковесной виртуальной машины. Клиенты могут назначать выделенные IP-адреса для каждого контейнера, что устраняет необходимость в индивидуальном пробросе портов. Контейнеры достигают времени запуска менее секунды благодаря оптимизированной конфигурации ядра Linux и минимальной корневой файловой системе с легковесной системой инициализации. Подпроект vminitd — это небольшая система инициализации, запускаемая как начальный процесс внутри ВМ; она предоставляет gRPC API через vsock, чтобы можно было настраивать среду выполнения и запускать контейнерные процессы, а также передает ввод-вывод, сигналы и события обратно вызывающему процессу.
Проект абстрагирует VMM за протоколами VirtualMachineManager / VirtualMachineInstance и поставляет два бэкенда. Бэкенд macOS напрямую использует Virtualization.framework (VZVirtualMachineManager) без дополнительных бинарных файлов. Бэкенд Linux использует cloud-hypervisor с KVM (CHVirtualMachineManager), запуская один подпроцесс cloud-hypervisor на каждую ВМ, управляемую через его REST-on-UDS API, с virtio-blk для блочного хранения, virtio-fs (один virtiofsd на общий ресурс) для общих каталогов, TAP для сети и гибридный vsock от cloud-hypervisor для достижения того же контракта vminitd, что и в пути macOS. Бэкенд Linux требует cloud-hypervisor и virtiofsd на хосте, доступ к KVM и предварительно настроенную сетевую инфраструктуру TAP/мост/NAT.
Требования для сборки пакета: Mac с Apple silicon, macOS 26 и Xcode 26; более старые версии macOS не поддерживаются. Гостевая инициализация Linux (vminitd/vmexec) компилируется как статический бинарный файл внутри Linux-контейнера, а не кросс-компилируется на Mac, поэтому на хосте не нужен инструментарий Swift или Static Linux SDK — вместо этого используется CLI apple/container. Исполняемый файл cctl служит площадкой для изучения API, с командами для манипулирования OCI-образами, входа в реестры, создания блоков корневой файловой системы и запуска простых Linux-контейнеров.
Для запуска легковесных ВМ на macOS требуется ядро Linux. Репозиторий включает оптимизированную конфигурацию ядра в каталоге kernel/ с контейнеризованной средой сборки для его компиляции. Конфигурация минимальна для поддержки быстрого запуска и легковесной среды, и Containerization предоставляет первоклассные API для использования различных конфигураций и версий ядра для каждого контейнера. Поддерживаются пользовательские ядра, функциональность протестирована начиная с версии ядра 6.14.9. Предварительно собранные ядра должны иметь драйверы VIRTIO, скомпилированные в ядро (не только как модули); проект Kata Containers предоставляет подходящее ядро.
Рабочий процесс сборки и тестирования: установите рекомендуемый Xcode, установите активный каталог разработчика, установите CLI apple/container, затем выполните `make all` для сборки и `make test integration` для запуска тестов. Для интеграционных тестов требуется ядро; `make fetch-default-kernel` загружает ядро по умолчанию. Интерфейсы Protobuf можно перегенерировать с помощью `make protos`, предварительный хук можно установить с помощью `make pre-commit`, а документацию API можно сгенерировать локально с помощью `make docs` и `make serve-docs`.
Проект находится на версии 0.1.0, первом официальном выпуске. Стабильность исходного кода гарантируется только в пределах минорных версий (например, между 0.1.1 и 0.1.2); потребители, которые хотят избежать потенциально ломающих исходный код обновлений, могут закрепить зависимости с помощью .upToNextMinorVersion(from: "0.1.0"). Вклад приветствуется через файл CONTRIBUTING.md.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.