Docker Engine vs Docker Desktop
Когда ты слышишь «надо установить Docker», это может означать совершенно разные вещи в зависимости от ОС. На Linux это один daemon. На macOS и Windows — это GUI-приложение поверх скрытой Linux VM. И ещё есть несколько альтернатив, которые делают то же самое, но с разными trade-off’ами по скорости, цене и стек-совместимости.
В этом уроке разбираемся, что вообще такое «Docker» как продукт, и почему вокруг него за последние три года выросла экосистема альтернатив.
Docker Engine
Docker Engine — это набор daemon’ов и CLI, который работает на Linux. Это «классический» Docker — то, что появилось в 2013 году и легло в основу всего остального.
Docker Engine ставится на Ubuntu, Debian, RHEL, CentOS, и другие Linux-дистрибутивы. Он работает напрямую на хостовом ядре — нет VM, нет GUI. Только daemon и CLI. Это то, что обычно стоит на serverах (если они не на Kubernetes).
Docker Engine — бесплатный и open source (Apache 2.0 для большей части кода). За него никто никогда денег не просил.
Docker Desktop
На macOS и Windows нет хостового Linux-ядра. Контейнеры — это Linux-фича. Поэтому, чтобы Docker работал на маке или винде, нужно где-то запустить Linux.
Docker Desktop — это решение от Docker Inc: GUI-приложение, которое:
- Поднимает небольшую Linux VM (через Apple Virtualization Framework на mac или Hyper-V/WSL2 на Windows).
- В этой VM запускает Docker Engine.
- Прокидывает
dockerCLI на хост, чтобы ты мог писать команды как на Linux. - Даёт GUI для управления, настройки ресурсов, обновлений.
Это удобно и просто работает — установил, запустил, есть Docker. Никакой ручной настройки VM.
Но у Docker Desktop есть нюанс: **с 2022 года это платный продукт для коммерческого использования в компаниях с >250 сотрудников или 5-21 в месяц на пользователя в зависимости от плана. Для маленьких компаний и личного использования — бесплатно.
Это коммерческое условие и стало толчком для появления альтернатив.
Архитектура Docker Desktop на macOS
Из этой архитектуры вытекают важные следствия:
- Bind mount на mac медленный. Когда ты пробрасываешь папку с хоста в контейнер, файлы проходят через VM-границу. На большом количестве мелких файлов (типичный node_modules или Python venv) это становится очень медленно.
- Порт-прокси. Когда контейнер слушает порт 8080, Docker Desktop пробрасывает этот порт с VM на хост-mac.
- Ресурсы VM ограничены. В Settings -> Resources ты указываешь, сколько RAM и CPU выделить VM. По умолчанию 8 ГБ RAM, можно меньше или больше.
Почему появились альтернативы
К 2022 году несколько вещей сошлось:
- Docker Inc сделала Desktop платным для компаний. Это вызвало много шума в индустрии, и компании начали искать альтернативы.
- Docker Desktop на mac M1/M2/M3 был медленным. Особенно при работе с большими node_modules или Python venv. Bind mount работал через 9p / virtiofs, и performance был так себе.
- Безопасность. Daemon Docker по умолчанию работает от root. Это всегда было неудобно для security-conscious команд.
- Дополнительная сложность. Docker Desktop с собой тащит обновления, telemetry, integration с Docker Hub login. Многим достаточно было просто «docker run».
Из этого выросла экосистема альтернатив:
- OrbStack (mac only, 2023) — быстрый Docker-совместимый runtime для macOS. Стартует за секунды, мало памяти, отличная производительность bind mount.
- Rancher Desktop (cross-platform, 2021) — open source альтернатива от SUSE/Rancher. Docker + k3s в одном пакете.
- Podman Desktop (cross-platform, 2022) — Red Hat. Daemonless, rootless по умолчанию.
- Colima (mac, 2021) — CLI-only альтернатива. Docker внутри lima-VM.
- nerdctl + containerd — голый containerd с Docker-совместимым CLI.
В следующем уроке мы пройдёмся по этим альтернативам подробно. Сейчас важно: «Docker» сегодня — это не один продукт, это семейство.
Что выбрать сразу
Короткие рекомендации без подробностей (подробно — в следующих уроках):
- На Linux: ставь Docker Engine из официальных репозиториев. Бесплатно, нативно, без VM. Это лучший вариант.
- На macOS для personal или малого dev: OrbStack. Быстрее Docker Desktop, бесплатен для personal use.
- На macOS для коммерческой работы в компании, которая может купить лицензию: Docker Desktop, если есть бюджет. Иначе — OrbStack или Rancher Desktop.
- На Windows: Docker Desktop с WSL2 backend, либо Rancher Desktop. WSL2 сам по себе — это Linux VM от Microsoft, работает быстро.
Терминологический сумбур
В разговоре часто путают понятия:
- «Docker» — может означать компанию, продукт Docker Engine, или просто контейнерную технологию в общем.
- «Docker daemon» — это
dockerd, серверная часть на Linux. - «Docker Engine» — это совокупность daemon + CLI + поддерживающие компоненты.
- «Docker Desktop» — это GUI-приложение для mac/Windows с встроенной Linux VM.
- «Docker CLI» — это команда
dockerв терминале. Может работать с любым OCI-совместимым daemon’ом.
В дальнейшем в курсе мы будем стараться различать. Когда речь про CLI — пишем «команда docker» или «docker CLI». Когда про backend — «Docker Engine» или «daemon». «Docker Desktop» — только в контексте mac/Windows.
Попробуй сам
Посмотри, что у тебя работает:
docker version
Вывод покажет две секции: Client (CLI) и Server (daemon). Если они на разных версиях — это нормально для Docker Desktop (CLI на хост-mac, server в VM). На Linux обычно версии совпадают.
Дальше:
docker info | grep -E '(Server Version|Storage Driver|Cgroup|Operating System)'
Это покажет, какой runtime, storage driver и ОС внутри. На mac в Operating System будет Docker Desktop или похожее. На Linux — нативная ОС.
И:
docker context ls
Если у тебя несколько движков (например, OrbStack + Docker Desktop оба установлены), здесь будут разные контексты. Активный помечен звёздочкой.