Ты набираешь docker run alpine на своём M3, контейнер стартует, и кажется, что Linux-контейнеры крутятся прямо на macOS. Это иллюзия, и пока ты её не разрушишь, половина проблем с производительностью и сетью будет казаться магией.
Контейнер - это не виртуалка. Контейнер - это процесс хост-ядра, изолированный namespace'ами и cgroups Linux. Ключевое слово - ядра Linux. У macOS ядро не Linux, а XNU (гибрид Mach + BSD). Никаких namespaces и cgroups в духе Linux там нет. Значит, чтобы запустить Linux-контейнер на Mac, нужно сначала где-то взять работающее Linux-ядро. Его берут из легковесной виртуальной машины.
Поэтому любая связка "docker desktop mac", colima, OrbStack, Rancher Desktop устроена одинаково по сути:
- поднимается Linux-VM (через Apple Virtualization.framework или QEMU);
- внутри неё крутится демон контейнеров (dockerd, containerd);
- а CLI у тебя на macOS общается с демоном внутри VM по сокету.

Что под капотом: VM, проброс файлов и сети
Разберём механику по слоям, потому что именно здесь рождаются грабли.
Гипервизор. На Apple Silicon есть штатный Virtualization.framework - системный API Apple для запуска VM с аппаратным ускорением (тип гипервизора 2, поверх Hypervisor.framework). Современные инструменты используют именно его (в colima это режим --vm-type vz). Старый путь - QEMU в софтверной или kvm-подобной эмуляции, он медленнее и нужен в основном для эмуляции чужой архитектуры (запустить amd64-образ на arm64).
Архитектура образов. Твой Mac - arm64 (aarch64). Linux-VM тоже arm64. Значит, по умолчанию ты тянешь и запускаешь arm64-образы. Когда образа под arm нет или тебе нужен ровно amd64 (воспроизвести прод), включается эмуляция через QEMU/Rosetta. Rosetta 2 умеет ускорять трансляцию x86_64-кода и внутри Linux-VM - это даёт почти нативную скорость amd64-бинарей вместо медленного QEMU-TCG. Поэтому образы для разных платформ помечают так:
Код: Выделить всё
docker run --platform=linux/amd64 alpine uname -m
x86_64
Проброс файлов (вот главная боль). Контейнер живёт в VM, а исходники проекта - на macOS-диске (APFS). Когда ты делаешь bind mount (-v $(pwd):/app), файлы надо как-то отдать внутрь VM через границу хост<->гость. Классический путь - сетевые протоколы вроде gRPC-FUSE или 9p/virtio-fs. Любой из них на мелких частых операциях (тысячи stat/open, как у node_modules или composer) даёт ощутимую просадку. Отсюда легенда "docker на маке тормозит" - тормозит не контейнер, тормозит шара bind mount.
Проброс сети. У VM свой сетевой стек. Чтобы curl localhost:8080 с macOS попадал в контейнер, проброшенный порт форвардится из VM на хост. Большинство инструментов делает это прозрачно, но именно здесь различается, видишь ли ты контейнеры по их собственным IP напрямую с macOS (OrbStack и Apple container умеют, классический Docker Desktop - нет без доп. настроек).
Игроки 2026: docker desktop mac, orbstack, colima, apple container
Docker Desktop - дефолт индустрии. GUI, встроенный Kubernetes, docker compose, расширения, Dev Environments. Минусы: тяжёлый (базовая VM легко ест 2+ ГБ RAM в простое), и лицензия. С 2021 года коммерческое использование в организации крупнее порога (более 250 сотрудников ИЛИ более 10 млн долларов годовой выручки - достаточно одного из условий) требует платной подписки Pro/Team/Business. Для личного использования, обучения, некоммерческого open source и малого бизнеса - бесплатно. Это не про сам Docker (движок и CLI - Apache 2.0), а именно про приложение Docker Desktop. Многие переходят на альтернативы именно из-за этого пункта.
OrbStack - на 2026 это самая популярная замена Docker Desktop на Mac. Сделан нативно под Apple Silicon, стартует меньше чем за пару секунд, в простое держит порядка 200-300 МБ RAM против 2+ ГБ у Docker Desktop, файловые операции на bind mount в разы быстрее. Понимает обычный docker CLI и docker compose без переучивания, плюс умеет лёгкие Linux-машины (как мини-WSL) и локальный Kubernetes. Минус один, но важный для бизнеса: для коммерции это платный продукт (есть бесплатный личный/некоммерческий тариф). По духу "orbstack" - это "docker desktop, только быстро и без жора".
colima (Containers on Lima) - бесплатный CLI-инструмент поверх Lima (Linux Machines). Никакого GUI, всё из терминала. Идеален для тех, кто живёт в консоли и хочет полный контроль и нулевую лицензионную головную боль. Поднимает Linux-VM и кладёт туда docker или containerd:
Код: Выделить всё
brew install colima docker
colima start --cpu 4 --memory 8 --disk 60 --vm-type vz
docker ps
Rancher Desktop (открытый, с упором на Kubernetes/k3s и nerdctl) и Podman Desktop (демонлесс, rootless, дружит с red-hat-миром и квадлетами) - тоже живые и бесплатные альтернативы. Rancher хорош, если основная работа - локальный кластер; Podman - если важна модель без демона и совместимость с серверным Podman.
Apple container - новинка, ради которой стоило открывать урок. Это официальный open source CLI от Apple для запуска Linux-контейнеров на Apple Silicon, представленный на WWDC 2025, стабильная версия 1.0.0 вышла 9 июня 2026. Принцип радикально иной, чем у всех выше: вместо одной общей большой VM на все контейнеры, "apple container" поднимает отдельную сверхлёгкую Linux-VM на каждый контейнер. Это даёт аппаратную изоляцию уровня VM при гранулярности контейнера. Построен на Virtualization.framework и Swift-пакете apple/containerization, без стороннего гипервизора. Образы - OCI-совместимые, тянутся и пушатся в любой обычный реестр (Docker Hub и т.д.). Требования жёсткие: только Apple Silicon и только macOS 26 Tahoe (он опирается на новые фичи виртуализации и сети именно этого релиза). CLI намеренно похож на docker:
Код: Выделить всё
container system start
container images pull docker.io/library/nginx:latest
container run --rm --name web -p 8080:80 nginx:latest
container ls
Практика: смотрим, где живёт твой docker mac
Сначала пойми, какой backend сейчас активен. docker context показывает, к какому демону подключён CLI:
Код: Выделить всё
docker context ls
NAME DESCRIPTION DOCKER ENDPOINT
default Current DOCKER_HOST based configuration unix:///var/run/docker.sock
colima * colima unix:///Users/you/.colima/default/docker.sock
desktop-linux Docker Desktop unix:///Users/you/.docker/run/docker.sock
Теперь докажем себе, что под капотом Linux, а не macOS. Запросим ядро изнутри контейнера:
Код: Выделить всё
docker run --rm alpine uname -sr
Linux 6.10.14-orbstack-...
Замерим боль bind mount наглядно. Создадим много мелких файлов на шаре и без неё:
Код: Выделить всё
mkdir -p ~/bmtest && cd ~/bmtest
# на проброшенной с macOS папке
docker run --rm -v "$PWD":/m alpine sh -c 'cd /m; time (for i in $(seq 1 2000); do echo x > f$i; done)'
# внутри тома самой VM (named volume)
docker run --rm -v vol:/m alpine sh -c 'cd /m; time (for i in $(seq 1 2000); do echo x > f$i; done)'
Типичные грабли и как обойти
- Тормоза на bind mount. Не маунти тяжёлые каталоги зависимостей с macOS внутрь. node_modules, vendor, .git держи в named volume или собирай внутри образа. Часто помогает делегированная синхронизация и исключение этих папок из шары. OrbStack и Apple container на файловых операциях ощутимо быстрее старого Docker Desktop - если упёрся в I/O, это весомый аргумент за переезд.
- Не та архитектура образа. exec format error или "no matching manifest for linux/arm64" значит, образ собран только под amd64. Лечится docker run --platform=linux/amd64 ... или мульти-арч сборкой через docker buildx. Помни: эмуляция медленнее нативного arm.
- "docker: command not found" после colima start. colima ставит VM, но клиент docker - отдельный пакет. Нужен brew install docker (а для compose - docker-compose или плагин). colima лишь поднимает демон и контекст.
- Конфликт контекстов. Параллельно установленные Docker Desktop и colima/OrbStack дерутся за активный контекст и переменную DOCKER_HOST. Держи один активный, проверяй docker context ls перед дебагом "почему не вижу контейнер".
- Apple container не стартует. Проверь, что это Apple Silicon и именно macOS 26 Tahoe - на Intel и на старых macOS он не работает в принципе. И не забудь container system start: без сервиса команды run/build молчат.
- Лицензия Docker Desktop в компании. Если в организации более 250 человек или более 10 млн долларов выручки - бесплатное использование Docker Desktop вне закона. Это юридический, а не технический риск. Здесь и выстреливают бесплатные colima/Rancher/Podman либо платный, но лёгкий OrbStack.
- Поставь colima и docker: brew install colima docker. Запусти colima start --vm-type vz и убедись docker ps работает.
- Выполни docker run --rm alpine uname -sr и сравни с uname -sr в своём терминале. Зафиксируй: Darwin против Linux - вот она VM.
- Прогони замер bind mount против named volume из практики выше. Своими глазами увидь разницу во времени.
- Запусти docker run --platform=linux/amd64 alpine uname -m и docker run --platform=linux/arm64 alpine uname -m. Сравни x86_64 и aarch64 - это эмуляция против натива.
- Если у тебя Apple Silicon на macOS 26: установи Apple container (brew install --cask container или релиз с github.com/apple/container), сделай container system start, затем container run --rm nginx:latest и container ls. Прочувствуй модель "VM на контейнер".
- Почему для Linux-контейнера на Mac в любом случае нужна виртуальная машина, а на Linux-сервере - нет?
- Чем архитектурно Apple container отличается от Docker Desktop и colima в части изоляции (сколько VM и на что)?
- Откуда берётся просадка скорости на bind mount и какими двумя приёмами её лечат?
- При каких условиях по сотрудникам и выручке Docker Desktop в компании становится платным, и какие бесплатные альтернативы это снимают?
Запомни главное: на Mac контейнер всегда едет внутри Linux-VM, и весь выбор инструмента - это выбор тонкости этой прослойки и способа проброса файлов/сети. Docker Desktop - удобный дефолт с лицензионной оговоркой для крупных. OrbStack - быстрый лёгкий заменитель на Apple Silicon. colima - бесплатный CLI для консольщиков. Apple container - официальный путь Apple с моделью "одна микро-VM на контейнер" под macOS 26. Понимая механику VM, эмуляции архитектур и bind mount, ты будешь чинить причину, а не симптом. В следующих главах курса про Docker мы используем этот фундамент при сборке образов и compose-стеков.
Источники: github.com/apple/container, github.com/apple/containerization, docs.docker.com/subscription/desktop-license, colima.run/docs, brew.sh