Если вы пользователь 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. Подписывайтесь!

Комментарии (10)


  1. vasille
    30.07.2025 14:52

    Вы не знаете почему Windows отказалась от WSL1? Чем контейнеры лучше?


    1. Chumikov Автор
      30.07.2025 14:52

      Я конечно же погуглил, чтобы Вам ответить.

      Там ряд проблем архитектурных было. Основное:

      1) WSL1 использовал слой перевода Linux-системных вызовов в Windows-эквиваленты, что не покрывало все функции ядра Linux. Это мешало запуску многих приложений;

      2) WSL1 сильно отставал в скорости операций с файлами (особенно при работе с Git, npm, apt). Например, распаковка архивов в WSL2 стала быстрее в 20 раз;

      3) Виртуализация в WSL2 позволила оптимизировать сетевой стек, что критично для веб-разработки и контейнеризации


      1. hello_my_name_is_dany
        30.07.2025 14:52

        По сути, второй и третий пункт вышли из первого


        1. Chumikov Автор
          30.07.2025 14:52

          Да, там всё взаимосвязано.


      1. 13werwolf13
        30.07.2025 14:52

        Виртуализация в WSL2 позволила оптимизировать сетевой стек, что критично для веб-разработки и контейнеризации

        иии убила возможность пользоваться этим когда винда в виртуалке..
        нет, оно конечно работает, но со скоростью полудохлой черепахи. всё же вм внутри вм..


        1. Chumikov Автор
          30.07.2025 14:52

          Недавно wsl2 вынесли в open source. Я думаю, что это ускорит развитие "весла". Может и вашу проблему как-то решат.