Learning Platform
Глоссарий Troubleshooting
Урок 04.01 · 16 мин
Начальный
dockerdocker-desktopdocker-engineinstall

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 — что внутри
docker (CLI)Команда docker в терминале. HTTP-клиент к docker daemon. Не сам daemon, а только клиент
REST API
dockerd (daemon)Главный сервер. Слушает /var/run/docker.sock. Управляет образами, контейнерами, сетями, volumes
containerdВысокоуровневый контейнерный runtime. Скачивает образы, распаковывает, управляет жизненным циклом. Часть Docker Engine, но также самостоятельный проект
запускает
runcНизкоуровневый OCI runtime. Делает clone() с namespace-флагами, монтирует rootfs, применяет cgroups
Linux kernelХостовое ядро. Без него Docker Engine не работает. Поэтому на mac/Windows используется VM
Linux-дистрибутивы: Ubuntu, Debian, RHEL, Alpine

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-приложение, которое:

  1. Поднимает небольшую Linux VM (через Apple Virtualization Framework на mac или Hyper-V/WSL2 на Windows).
  2. В этой VM запускает Docker Engine.
  3. Прокидывает docker CLI на хост, чтобы ты мог писать команды как на Linux.
  4. Даёт GUI для управления, настройки ресурсов, обновлений.

Это удобно и просто работает — установил, запустил, есть Docker. Никакой ручной настройки VM.

Но у Docker Desktop есть нюанс: **с 2022 года это платный продукт для коммерческого использования в компаниях с >250 сотрудников или 10M+revenue.Цена—около10M+ revenue**. Цена — около 5-21 в месяц на пользователя в зависимости от плана. Для маленьких компаний и личного использования — бесплатно.

Это коммерческое условие и стало толчком для появления альтернатив.


Архитектура Docker Desktop на macOS

Docker Desktop на mac — что под капотом
docker CLI на macТо, что ты печатаешь в Terminal.app. Это macOS-бинарь, HTTP-клиент. Идёт к docker.sock в VM
socket forward
Linux VMВиртуальная машина с Linux. Apple Virtualization Framework (или ранее xhyve). Размер дисковой quota настраивается в Settings
dockerd внутри VMРеальный Docker Engine внутри VM. Это он создаёт контейнеры. Хост-mac его не видит напрямую
запускает
КонтейнерыСами контейнеры живут в VM. То что ты видишь через docker ps — это запрос к VM, не на хост-mac
GUIDocker Desktop приложение в строке меню. Управление ресурсами, обновлениями, расширениями

Из этой архитектуры вытекают важные следствия:

  • Bind mount на mac медленный. Когда ты пробрасываешь папку с хоста в контейнер, файлы проходят через VM-границу. На большом количестве мелких файлов (типичный node_modules или Python venv) это становится очень медленно.
  • Порт-прокси. Когда контейнер слушает порт 8080, Docker Desktop пробрасывает этот порт с VM на хост-mac.
  • Ресурсы VM ограничены. В Settings -> Resources ты указываешь, сколько RAM и CPU выделить VM. По умолчанию 8 ГБ RAM, можно меньше или больше.

Почему появились альтернативы

К 2022 году несколько вещей сошлось:

  1. Docker Inc сделала Desktop платным для компаний. Это вызвало много шума в индустрии, и компании начали искать альтернативы.
  2. Docker Desktop на mac M1/M2/M3 был медленным. Особенно при работе с большими node_modules или Python venv. Bind mount работал через 9p / virtiofs, и performance был так себе.
  3. Безопасность. Daemon Docker по умолчанию работает от root. Это всегда было неудобно для security-conscious команд.
  4. Дополнительная сложность. 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 оба установлены), здесь будут разные контексты. Активный помечен звёздочкой.


Проверка знанийKnowledge check
Почему Docker Desktop на macOS использует виртуальную машину, и каковы практические следствия этого?
ОтветAnswer
Контейнеры — это Linux-технология, построенная на namespaces и cgroups Linux-ядра. macOS работает на Darwin (BSD-based) и не имеет Linux-ядра. Поэтому, чтобы запустить контейнеры на маке, нужно сначала запустить Linux — а это делается через VM. Docker Desktop поднимает Linux VM (через Apple Virtualization Framework) и крутит в ней Docker Engine. С хост-mac команда docker — это HTTP-клиент, который шлёт запросы в эту VM. Практические следствия три. Первое — bind mount медленный: файлы проходят через VM-границу через virtiofs/9p, на большом числе мелких файлов (node_modules, Python venv) скорость падает. Второе — ресурсы VM ограничены явно: в Settings указываешь, сколько RAM и CPU выделить, по умолчанию обычно 8 ГБ. Третье — порты пробрасываются через прокси: контейнер слушает порт в VM, Docker Desktop форвардит его на хост-mac. Тот же принцип на Windows, только VM поднимается через Hyper-V или WSL2.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 5. Чем Docker Engine отличается от Docker Desktop?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 4