lima-docker-lean

lima-docker-lean: Docker на macOS почти без затрат в простое

English · Русский

License: MIT Lima 2.2 Apple Silicon Virtualization.framework

Минимальный Docker-хост для Mac на Apple Silicon, каждая настройка которого подтверждена замерами. Построен на Lima и Apple Virtualization.framework. В простое он ничего не пишет на диск и занимает около 1% одного ядра. В отличие от обычной VM в Lima, он позволяет macOS забрать обратно примерно половину RAM, которую VM держит после нагрузки. Это настоящий Docker Engine с docker.sock, поэтому testcontainers, docker compose, buildx и werf работают без изменений.

Это не очередная обёртка, а один шаблон Lima и разбор каждой его строки, вместе с сырыми результатами бенчмарков.

Результаты

Apple M5, 16 ГБ, macOS 26.6, Lima 2.2.0, гость 4 vCPU / 6 ГиБ. Одиночные прогоны; см. ограничения.

  Обычный Alpine в Lima Этот шаблон
CPU хоста в простое (пустая VM) 1,31% ядра 1,00–1,12%
Запись на диск в простое ~25 КБ/мин (почему) 0 Б
limactl restart → готов ~26 с ~14 с
RAM хоста, реально занятая после нагрузки Postgres + FoundationDB ~4,2 ГБ ~2,1 ГБ (как)
pgbench (8 клиентов) / запись в FoundationDB ~15 тыс. tps / ~246 тыс. ключей/с так же

Быстрый старт

brew install lima docker            # Lima >= 2.2 и docker CLI (+ плагины compose/buildx)
git clone https://github.com/heaprip/lima-docker-lean && cd lima-docker-lean

limactl start --name=dev ./templates/minimal-docker.yaml
limactl restart dev                 # один раз, чтобы загрузиться с init_on_free=1

docker context create lima-dev --docker "host=unix://$HOME/.lima/dev/sock/docker.sock"
docker context use lima-dev
docker run --rm -p 8080:80 nginx:alpine   # опубликованные порты появляются на localhost

Для testcontainers укажите в DOCKER_HOST тот же сокет (или используйте контекст). Когда не работаете, limactl stop dev сводит затраты к нулю.

Что делает шаблон

Каждый пункт объяснён и замерен в анализе:

Коротко о выводах

Структура репозитория

templates/   minimal-docker.yaml (рекомендуемый), minimal-docker-iso.yaml (немутабельная альтернатива)
docs/en/     analysis.md: полный разбор с методикой и ограничениями (англ.)
docs/ru/     analysis.md: то же по-русски
bench/       idle.sh, disk-writes.sh, wakeups.sh, load.sh, memtest.sh, fdbbench.py
results/     сырые выводы всех прогонов, упомянутых в документации

Как воспроизвести

./bench/idle.sh dev 120 60      # пустой простой: CPU хоста, I/O диска гостя, память
./bench/load.sh dev             # Postgres + FoundationDB: простой с контейнерами, нагрузка, простой после
./bench/memtest.sh dev          # реальная цена RAM на хосте после нагрузки (останавливает VM!)

Комментарии в шаблонах и скриптах — на английском.

Лицензия

MIT. Замеры и текст: @heaprip, с помощью Claude.