DescubreApple

Apple, Mac, iPhone, iPad

macOS

Как пользоваться Docker Desktop на MacBook с Apple Silicon, чтобы он не тормозил

Практическое руководство по оптимизации Docker Desktop на Mac с чипами M1, M2 и M3: настройки VirtioFS, Rosetta 2, памяти и альтернативы вроде OrbStack или Colima, когда Docker не справляется.

Cómo usar Docker Desktop en MacBook con Apple Silicon sin que se ralentice
Como Usar Docker Desktop En Macbook Con Apple Silicon Sin Que Se Ralentice

Если вы работаете с контейнерами на MacBook с Apple Silicon, вы знаете, что Docker Desktop не всегда работает гладко. Он запускается медленно, съедает оперативную память, вентилятор включается, когда вы собираете довольно крупный образ, а если ваш образ linux/amd64, ситуация становится хуже. Это руководство о том, как сделать Docker Desktop удобным на Mac M1, M2 или M3, какие настройки изменить, когда стоит признать, что Docker не лучший вариант, и какие альтернативы стоят внимания.

Всё описанное проверено на macOS Sequoia 15.1 с Docker Desktop 4.35 на MacBook Pro M3 Pro с 18 ГБ оперативной памяти и MacBook Air M2 с 16 ГБ. Принципы одинаково применимы и к M1.

Почему Docker Desktop тормозит на Apple Silicon

Docker никогда не работал на macOS нативно. Ему нужно ядро Linux, а в macOS его нет. Docker Desktop запускает легковесную виртуальную машину Linux с помощью фреймворка виртуализации Apple (Virtualization.framework на Apple Silicon) и внутри неё работает демон Docker.

Это означает две вещи: постоянный слой виртуализации и мост между файловой системой macOS и файловой системой виртуальной машины. Исторически именно этот мост был главным узким местом.

К этому добавляются образы linux/amd64. Ваш Mac использует ARM64. Если запустить контейнер x86_64, Docker эмулирует его через Rosetta 2 или QEMU. Эмуляция целой архитектуры обходится дорого: в зависимости от нагрузки производительность падает на 30–60%.

Предварительные требования

  • macOS 13 Ventura или новее (для стабильной работы VirtioFS рекомендуется Sequoia).
  • Docker Desktop 4.25 или новее. Версия 4.35 заметно улучшила управление ресурсами.
  • Mac с чипом M1, M2, M3 (или новее) и минимум 16 ГБ оперативной памяти, если вы работаете с более чем двумя контейнерами одновременно.
  • Установленная Rosetta 2: softwareupdate --install-rosetta --agree-to-license.

Установка Docker Desktop на Mac с Apple Silicon

Скачайте установщик для Apple Silicon с docker.com. Внимание: есть две сборки, для Intel и для Apple Silicon. Если по ошибке скачать версию для Intel, всё будет работать через Rosetta и вы потеряете производительность без причины.

Перетащите приложение в /Applications, откройте его, подтвердите разрешения на привилегированную сеть и дождитесь появления значка кита в строке меню.

Ключевые настройки, чтобы Docker не тормозил

Здесь самая полезная часть статьи. Эти настройки дают реальный эффект.

Включите VirtioFS как файловую систему

VirtioFS пришла на смену gRPC-FUSE. Она в 2–5 раз быстрее читает и записывает данные в смонтированные из macOS тома. Сейчас это значение по умолчанию, но если у вас старая установка, возможно, всё ещё используется gRPC-FUSE.

Путь: Docker Desktop → Settings → General → Virtual Machine Options → VirtioFS.

Перезапустите Docker после изменения. Разница заметна в любом проекте на Node, PHP или Python, который монтирует node_modules или vendor из локальной папки.

Используйте новый Virtualization Framework от Apple

На той же странице отметьте Use Virtualization framework (фреймворк Apple, а не QEMU). Он использует аппаратное ускорение чипов M.

Сразу под ним включите Use Rosetta for x86_64/amd64 emulation. Это заменит эмуляцию QEMU на Rosetta 2 при запуске образов amd64. Прирост для образов x86_64 очень заметен: в тестах с контейнерами MySQL 8 amd64 запуск сократился с 40 секунд до менее 15.

Настройте ресурсы CPU, памяти и диска

Путь: Settings → Resources → Advanced.

По умолчанию Docker Desktop выделяет скромную долю ресурсов. На Mac с 16 ГБ увеличьте память до 8 ГБ, если будете работать с базами данных. На Mac с 18 ГБ и более — от 8 до 10 ГБ. Не выделяйте больше 50% общей оперативной памяти: macOS тоже нужен запас.

CPU: оставьте системе как минимум 2 свободных ядра. На M3 Pro с 12 ядрами можно спокойно выделить Docker 8.

Диск: виртуальный диск растёт по мере необходимости. Установите разумный предел (обычно хватает 64 ГБ) и раз в две недели очищайте старые образы командой docker system prune -a.

Отключите ненужные функции

В Settings → General снимите отметку с Send usage statistics, с Open Docker Dashboard at startup, если он вам не нужен, и с SBOM indexing, если не анализируете уязвимости. Каждая из этих функций потребляет ресурсы.

В Settings → Kubernetes оставьте Kubernetes выключенным, если не используете его по-настоящему. Локальный кластер K8s съедает 2 ГБ оперативной памяти даже без нагрузки.

По возможности используйте образы ARM64

Самый быстрый способ ускорить Docker на Mac — ничего не эмулировать. Многие официальные образы уже имеют сборки linux/arm64: PostgreSQL, Redis, Nginx, Node, Python, Ruby, Go и большинство современных баз данных.

Проверьте доступные архитектуры перед pull:

docker manifest inspect postgres:16 | grep architecture

Если видите arm64, берите этот образ без принудительной платформы. Если есть только amd64, тогда действительно нужна Rosetta.

Чтобы принудительно указать платформу:

docker run --platform linux/arm64 postgres:16
docker run --platform linux/amd64 mysql:5.7

В вашем docker-compose.yml добавьте platform: linux/arm64 к каждому сервису, чтобы избежать сюрпризов.

Когда Rosetta 2 спасает ситуацию, а когда нет

Rosetta 2 хорошо справляется со статическими бинарными файлами и приложениями с универсальными вычислениями. Для старых баз данных, устаревших инструментов или корпоративных образов, существующих только в amd64, включение Rosetta поможет выйти из ситуации.

Где Rosetta всё ещё слабее: нагрузки с интенсивным вводом-выводом, старые JVM (Java 8 amd64 может падать) и некоторые бинарные файлы с нестандартными системными вызовами. Если контейнер amd64 выдаёт странные ошибки при включённой Rosetta, попробуйте её отключить и вернуться к QEMU только для этого случая.

Оптимизация использования томов

Монтирование папок macOS внутрь контейнера остаётся самой дорогой операцией, даже с VirtioFS. Три правила:

  1. Не монтируйте node_modules, vendor или .git, если можно этого избежать. Для этих каталогов используйте именованные тома Docker: они находятся внутри VM и работают на порядки быстрее.
  2. Используйте :delegated или :cached для монтирований, которым не нужна строгая согласованность. В VirtioFS эффект меньше, чем раньше, но он всё ещё есть.
  3. Избегайте массовых наблюдателей за файлами. Если ваш фреймворк пересобирает проект при каждом изменении файла, ограничьте отслеживаемые пути.

Пример именованного тома для node_modules:

services:
  app:
    build: .
    volumes:
      - .:/app
      - node_modules:/app/node_modules
volumes:
  node_modules:

Альтернативы Docker Desktop на Mac

Docker Desktop не единственный вариант и в некоторых случаях даже не лучший. Три серьёзные альтернативы:

OrbStack

OrbStack — самый близкий аналог «Docker Desktop, но быстрый». Он потребляет меньше памяти (запускается примерно с 400 МБ против 1,5 ГБ у Docker Desktop), стартует за 2–3 секунды и использует собственную реализацию виртуализации на Apple Silicon. Совместим с CLI Docker без изменений.

Стоит 8 долларов в месяц для коммерческого использования и бесплатен для личного. Если вы весь день работаете с контейнерами, он окупается за счёт сэкономленного заряда батареи.

Colima

Colima бесплатен, открыт и работает из командной строки. Запускает виртуальную машину Linux с помощью Lima и открывает сокет Docker. Никакого графического интерфейса.

Установка:

brew install colima docker
colima start --cpu 4 --memory 8 --vm-type vz --vz-rosetta

Флаг --vz-rosetta включает Rosetta для amd64. Это идеально, если вы живёте в терминале и не хотите постоянно работающего приложения.

Podman

Podman — подход Red Hat: без демона, без root, совместим с CLI Docker через алиасы. На Apple Silicon работает хорошо, но экосистема образов и интеграция с инструментами вроде docker-compose пока менее отполированы.

Хорош, если вы работаете в средах RHEL или хотите ориентироваться на продакшен в Kubernetes/OpenShift.

Полезные команды для диагностики производительности

Посмотреть, какой контейнер потребляет ресурсы:

docker stats

Посмотреть реальный размер образов, контейнеров и томов:

docker system df

Очистить всё неиспользуемое (осторожно, удаляет образы без связанных контейнеров):

docker system prune -a --volumes

Частые проблемы и их решение

Docker Desktop не запускается после обновления macOS. Перезапустите службу: killall Docker && open /Applications/Docker.app. Если не помогло, перейдите в Troubleshoot → Reset to factory defaults.

Вентилятор разгоняется при сборке образов. Уменьшите выделенный Docker CPU в Settings → Resources. Если не помогло, проверьте, есть ли в вашем Dockerfile RUN с параллельными процессами (npm install, cargo build).

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

Контейнер amd64 не запускается. Проверьте, что Rosetta установлена (arch -x86_64 uname -m должен вернуть x86_64). Если всё равно не работает, этот конкретный бинарный файл несовместим с Rosetta 2; используйте QEMU, отключив опцию Rosetta.

Docker Desktop потребляет 3 ГБ оперативной памяти в простое. Для старых версий это нормально. Обновитесь до 4.30 или новее: динамический менеджер памяти возвращает её системе, когда активных контейнеров нет.

FAQ

Можно ли использовать Docker Desktop бесплатно для работы? Нет, если вы работаете в компании с более чем 250 сотрудниками или с годовым доходом свыше 10 миллионов долларов. Для личного использования, обучения и маленьких стартапов — да. Смотрите официальную лицензию Docker.

Стоит ли переходить на OrbStack? Если вы используете контейнеры каждый день и вас раздражает потребление ресурсов Docker Desktop, то да. Для эпизодического использования Docker Desktop подойдёт.

Rosetta 2 идеально эмулирует любой образ amd64? Нет. Она покрывает большинство случаев, но очень специфические бинарные файлы (старые JVM, инструменты со сложными SIMD-инструкциями) могут не работать. Запасной вариант — QEMU.

Можно ли запустить Kubernetes на Mac M3 без проблем? Да, но лучше с minikube или k3d, чем со встроенным Kubernetes Docker Desktop. Оба легче. Если нужна полноценная среда разработки с Windows и Linux одновременно, посмотрите как установить Windows 11 ARM на Mac M3 с Parallels Desktop 20.

Сколько оперативной памяти нужно для комфортной работы с Docker? 16 ГБ — минимум. 24 ГБ и более, если ваш стек одновременно включает базу данных, бэкенд, фронтенд и вспомогательные сервисы. Если думаете о смене компьютера, сравните MacBook Pro M4 Pro и M4 Max перед решением.

JG
🇷🇺 RU