
Если вы пользователь Apple, вы, возможно, слышали о новой функции Apple, Containerization
, представленной на WWDC 2025.
Краткое описание:
Container
— это инструмент командной строки, работающий с контейнеризацией . Именно с ним взаимодействуют конечные пользователи.Containerization
управляет созданием контейнеров, которые взаимодействуют сVirtualization.framework
.Virtualization.framework
— это API гипервизора (высокого уровня), который создает новую виртуальную машину для каждого контейнера черезHypervisor.framework
.Hypervisor.framework
— это низкоуровневый API гипервизора, который использует ядро macOS.
Она похожа на подсистему Windows для Linux 2 (WSL) от Microsoft, где в фоновом режиме запускается очень маленькая легковесная виртуальная машина, что позволяет использовать ядро Linux на хосте, отличном от Linux (WSL2 использует Hyper-V). Не путать с WSL1, которая больше напоминала WINE!
Его публичный выпуск запланирован на следующую крупную версию ОС — macOS Tahoe 26, а также на macOS Sequoia 15.
Containerization
поддерживает контейнеры, соответствующие стандарту «Open Container Initiative (OCI)», к счастью, наш образ Kali соответствует требованиям!
Установка
Если первое, что мы видим при попытке запуска container
это:
~ % container
zsh: command not found: container
~ %
…Нам нужно его установить.
Выполняем быструю проверку, чтобы убедиться, что наша система поддерживается:
~ % sw_vers -productVersion
15.5
~ %
~ % uname -m
arm64
~ %
Мы используем macOS 15.5 на устройстве серии Apple Silicon (также известном как arm64).
Мы готовы к запуску!
Если установлен Homebrew:
~ % brew install --cask container
==> Downloading https://github.com/apple/container/releases/download/0.2.0/container-0.2.0-installer-signed.pkg
==> Downloading from https://release-assets.githubusercontent.com/github-production-release-asset/993475914/c5fb6a42-f282-4dd7-95c2-af9b142f0ed1?sp=r&sv=2018-11-09&sr=b&spr=https&se=2025-07-17T14%3A06%3A32Z&r
######################################################################################################################################################################################################### 100.0%
==> Installing Cask container
==> Running installer for container with sudo; the password may be necessary.
Password:
installer: Package name is container-0.2.0-installer-signed
installer: Upgrading at base path /
installer: The upgrade was successful.
? container was successfully installed!
~ %
В противном случае мы можем вручную загрузить (подписанный) установочный файл с github.com/apple/container. На момент написания статьи он имел форматcontainer-0.2.0-installer-signed.pkg
.
Теперь, когда мы попробуем запустить его:
~ % container
OVERVIEW: A container platform for macOS
USAGE: container [--debug] <subcommand>
OPTIONS:
--debug Enable debug output [environment: CONTAINER_DEBUG]
--version Show the version.
-h, --help Show help information.
CONTAINER SUBCOMMANDS:
create Create a new container
delete, rm Delete one or more containers
exec Run a new command in a running container
inspect Display information about one or more containers
kill Kill one or more running containers
list, ls List containers
logs Fetch container stdio or boot logs
run Run a container
start Start a container
stop Stop one or more running containers
IMAGE SUBCOMMANDS:
build Build an image from a Dockerfile
images, image, i Manage images
registry, r Manage registry configurations
OTHER SUBCOMMANDS:
builder Manage an image builder instance
system, s Manage system components
~ %
…но мы еще не достигли цели!
Когда мы пытаемся заставить container
взаимодействовать с Containerization
, мы можем получить:
~ % container ls
Error: interrupted: "internalError: "failed to list containers" (cause: "interrupted: "XPC connection error: Connection invalid"")
Ensure container system service has been started with `container system start`."
~ %
Мы можем решить эту проблему, запустив службу в фоновом режиме:
~ % container system start
Verifying apiserver is running...
Installing base container filesystem...
No default kernel configured.
Install the recommended default kernel from [https://github.com/kata-containers/kata-containers/releases/download/3.17.0/kata-static-3.17.0-arm64.tar.xz]? [Y/n]: y
Installing kernel...
~ %
А вот теперь мы готовы к запуску!
Запуск контейнеров
Подобно Docker и Podman, мы можем запускать наши контейнеры:
~ % container run --rm -i -t kalilinux/kali-rolling
┌──(root㉿9ff4685f-76e1-42fa-86ba-f12e76c79843)-[/]
└─# id
uid=0(root) gid=0(root) groups=0(root)
При первом запуске container
потребуется скачать образ контейнера. В настоящее время реестром контейнеров по умолчанию является DockerHub.
Мы можем выполнять те же функции, что и в Docker / Podman, например, предоставлять общий доступ к каталогу:
~ % container run --remove --interactive --tty --volume $(pwd):/mnt --workdir /mnt docker.io/kalilinux/kali-rolling:latest
┌──(root㉿4be77ff5-bd57-4076-8bf0-8e51caff047e)-[/mnt]
└─# uname -a
Linux 4be77ff5-bd57-4076-8bf0-8e51caff047e 6.12.28 #1 SMP Tue May 20 15:19:05 UTC 2025 aarch64 GNU/Linux
Alias
Как только все заработает так, как и ожидалось, мы можем создать быстрый alias, чтобы не вводить каждый раз полную команду заново:
~ % alias container-shell='container run --remove --interactive --tty --entrypoint=/bin/bash --volume $(pwd):/mnt --name "$(hostname -s)-$(mktemp -u XXXXXX)" --workdir /mnt'
~ %
~ % echo "alias container-shell='container run --remove --interactive --tty --entrypoint=/bin/bash --volume $(pwd):/mnt --name "$(hostname -s)-$(mktemp -u XXXXXX)" --workdir /mnt'" >> ~/.zshrc
~ %
~ % container-shell kalilinux/kali-rolling:latest
┌──(root㉿mba22-vB9af6)-[/mnt]
└─#
Известные неисправности
В настоящее время существует ряд известных ограничений контейнеризации, особенно при использовании macOS «Sequoia» 15, таких как отсутствие IP-адреса при доступе контейнера к сети или отсутствие доступа к сети. Если вы столкнётесь с подобными проблемами, рекомендуем ознакомиться с рекомендациями Apple и следовать им.
Итог
И вот так у нас появился быстрый способ запустить контейнеры Kali на macOS. Это часть нашей постоянной стратегии «Kali Everywhere», в рамках которой мы размещаем необходимые вам инструменты в максимально возможном количестве мест, чтобы вам было удобно ими пользоваться. Существует множество способов запустить Kali. Обязательно посетите нашу страницу «Получить Kali», чтобы найти наиболее подходящий способ для вас.
От автора перевода
Да, приятно смотреть, как Linux проникает во все основные платформы: WSL2 для Windows, Linux Terminal для Android, а теперь ещё и для MacOS контейнеры готовят. По идее, используя данную инструкцию, можем запускать любые контейнеры, которые соответствуют требованиям.
Надеюсь, вам эта новость, как и мне, показалась очень интересной.
Больше новостей в моём Telegram. Подписывайтесь!
vasille
Вы не знаете почему Windows отказалась от WSL1? Чем контейнеры лучше?
Chumikov Автор
Я конечно же погуглил, чтобы Вам ответить.
Там ряд проблем архитектурных было. Основное:
1) WSL1 использовал слой перевода Linux-системных вызовов в Windows-эквиваленты, что не покрывало все функции ядра Linux. Это мешало запуску многих приложений;
2) WSL1 сильно отставал в скорости операций с файлами (особенно при работе с Git, npm, apt). Например, распаковка архивов в WSL2 стала быстрее в 20 раз;
3) Виртуализация в WSL2 позволила оптимизировать сетевой стек, что критично для веб-разработки и контейнеризации
hello_my_name_is_dany
По сути, второй и третий пункт вышли из первого
Chumikov Автор
Да, там всё взаимосвязано.
13werwolf13
иии убила возможность пользоваться этим когда винда в виртуалке..
нет, оно конечно работает, но со скоростью полудохлой черепахи. всё же вм внутри вм..
Chumikov Автор
Недавно wsl2 вынесли в open source. Я думаю, что это ускорит развитие "весла". Может и вашу проблему как-то решат.