Docker Desktop, WSL2 и альтернативы на Windows и Mac

Рейтинг: 65.7% · 17 голосов
Практический курс по Docker: образы, контейнеры, тома, сети, Compose и продакшен. Уроки по главам с обсуждением.
Ответить
Аватара пользователя
Marina_DevOps
Сообщения: 54
Зарегистрирован: 11 май 2026, 05:31

Docker Desktop, WSL2 и альтернативы на Windows и Mac

Сообщение Marina_DevOps »

Оглавление курса (46)
  1. Что такое Docker и какие задачи он решает
  2. Установка Docker и запуск первого контейнера
  3. Образы: слои, теги и реестр Docker Hub
  4. Пишем свой Dockerfile
  5. Тома и хранение данных: volumes и bind mounts
  6. Сети в Docker: связываем контейнеры между собой
  7. Переменные окружения и конфигурация контейнеров
  8. Docker Compose: поднимаем многоконтейнерное приложение
  9. Оптимизация образов: multi-stage сборка, размер и кэш слоёв
  10. Логи, отладка и мониторинг контейнеров
  11. Базовая безопасность контейнеров
  12. Подготовка к продакшену: что важно учесть
  13. Dockerfile глубже: ENTRYPOINT и CMD, HEALTHCHECK, .dockerignore, запуск не от root
  14. Реестры образов: приватные registry, push и pull, теги и digest, imagePullSecrets
  15. BuildKit и buildx: multi-arch сборки, секреты сборки, экспорт кэша
  16. Docker в CI/CD: автосборка, сканирование образов (Trivy, Docker Scout), публикация
  17. Итоговый проект и куда расти: от Dockerfile до прода, обзор оркестрации (Kubernetes, Podman, OCI)
  18. Архитектура Docker: dockerd, containerd, runc и OCI
  19. Как работает изоляция: namespaces и cgroups
  20. Образы изнутри: слои, OverlayFS и storage driver
  21. Жизненный цикл контейнера и политики перезапуска
  22. Отладка контейнеров: exec, attach, nsenter, debug
  23. Сети Docker глубже: bridge, overlay, macvlan и iptables
  24. Docker Compose глубже: profiles, healthcheck-зависимости, override
  25. Данные и тома глубже: драйверы, бэкап, права
  26. Секреты и конфигурация: как не светить пароли
  27. Ограничение ресурсов: CPU, память, OOM и cgroups
  28. Здоровье и автозапуск: HEALTHCHECK, init и сигналы
  29. Логирование контейнеров: драйверы, ротация, сбор
  30. Мониторинг контейнеров: stats, cAdvisor, Prometheus
  31. Безопасность глубже: rootless, user namespaces, seccomp, capabilities
  32. Supply chain: сканирование, SBOM и подпись образов
  33. Глубокая оптимизация образов: distroless, scratch, кэш
  34. Multi-arch и сборка под ARM: buildx и эмуляция
  35. Реестры в продакшене: Harbor и облачные registry
  36. Docker без Docker: Podman, containerd, nerdctl, Buildah
  37. От Compose к оркестрации: когда контейнеров становится много
  38. Docker Swarm: встроенная оркестрация
  39. Сборка образов в CI без демона: kaniko, BuildKit, Buildah
  40. Траблшутинг Docker: типичные ошибки и как чинить
  41. Производительность и эксплуатация Docker-хоста
  42. Docker Desktop, WSL2 и альтернативы на Windows и Mac (вы здесь)
  43. Контейнеризация приложений: бэкенд, фронтенд, БД
  44. Docker и Kubernetes: containerd, миграция, kompose
  45. Лучшие практики и антипаттерны Docker
  46. Сквозной проект: production-ready стек и путь дальше
Боль: на твоей машине нет Linux, а контейнеры есть только в Linux

Давай начистоту. Docker - это про Linux. Технология контейнеров целиком стоит на ядре Linux: namespaces изолируют процессы, cgroups режут ресурсы, overlayfs собирает слои образа. Ничего из этого в ядре Windows или macOS нет и быть не может - это другие ядра. Поэтому фраза "docker windows" или "docker mac" по сути всегда означает одно: где-то рядом тихо крутится Linux-виртуалка, и именно в ней живут твои контейнеры. Твой ноутбук с Windows или MacBook - это просто красивый пульт управления.

Это не мелочь, а ключ ко всему уроку. Как только ты понимаешь, что между твоим терминалом и контейнером всегда стоит граница "хост-ОС -> виртуальная Linux-машина", сразу становятся очевидны три главные головные боли: медленный доступ к файлам через эту границу, проброс портов и томов через неё, и вопрос "а чем вообще эту виртуалку поднимать". Старый курс говорил "поставь Docker Desktop и не думай". Мы будем думать, потому что в проде и в РФ-реалиях 2026 года думать приходится.

Изображение

Как устроен Docker Desktop под капотом

Docker Desktop - это не сам Docker. Это коммерческий продукт-обёртка от Docker Inc.: GUI, автообновления, дашборд, встроенный Kubernetes плюс механизм запуска той самой Linux-VM. Внутри неё работает обычный Docker Engine (демон dockerd поверх containerd и runc) - ровно тот же, что ты ставил бы на Linux-сервер. CLI на хосте (docker.exe или docker на Mac) общается с демоном внутри VM через сокет.

Дальше детали зависят от платформы.

Windows. Современный Docker Desktop использует WSL2 - Windows Subsystem for Linux второй версии. Вокруг "docker wsl2" много путаницы, поэтому разложим. WSL2 - это не эмуляция и не транслятор системных вызовов (так работала WSL1). WSL2 - это настоящее Linux-ядро, которое Microsoft собирает и запускает в очень лёгкой виртуалке поверх гипервизора Hyper-V. Docker Desktop ставит в WSL2 два своих служебных дистрибутива - docker-desktop (там крутится движок) и раньше был docker-desktop-data (хранилище образов). Твои собственные дистрибутивы (Ubuntu из Microsoft Store и т.п.) получают доступ к движку через интеграцию: в настройках Docker Desktop есть раздел "WSL Integration", где ты галочками включаешь, в каких дистрибутивах будет доступна команда docker.

Проверить, что ты реально на WSL2, можно из PowerShell:

Код: Выделить всё

wsl -l -v
Вывод примерно такой:

Код: Выделить всё

  NAME              STATE      VERSION
* Ubuntu            Running    2
  docker-desktop    Running    2
Колонка VERSION должна быть 2. Если там 1 - WSL2 не работает, и Docker Desktop откажется стартовать или будет тормозить. STATE Running у docker-desktop означает, что движок поднят.

Mac. Тут всё ещё проще и сложнее одновременно. macOS контейнеры запускать не умеет, поэтому Docker Desktop поднимает Linux-VM через фреймворк виртуализации Apple - Virtualization.framework (на старых версиях и на Intel-маках исторически был HyperKit на базе xhyve). На Apple Silicon (M1-M4) это нативная аппаратная виртуализация ARM, поэтому Linux внутри VM тоже ARM64. Запомни этот момент: образ, собранный на M-маке без указания платформы, по умолчанию будет arm64, и на amd64-сервере он не запустится. Лечится это явным указанием платформы при сборке (об этом ниже и в уроке про buildx).

Лицензия Docker Desktop: где он перестаёт быть бесплатным

Это та часть, из-за которой полкоманды внезапно мигрирует на альтернативы. Сам Docker Engine, containerd, runc, BuildKit - это open source под Apache 2.0, бесплатно навсегда. А вот Docker Desktop как продукт распространяется по подписочному соглашению Docker Inc., и оно платное для крупных организаций.

Условие на 2026 год: Docker Desktop бесплатен для личного использования, обучения, open source и для компаний, у которых меньше 250 сотрудников И меньше 10 миллионов долларов годовой выручки. Как только организация переваливает хотя бы один из этих порогов - нужна платная подписка (Pro, Team или Business). Цена стартует примерно от 5-9 долларов за пользователя в месяц в зависимости от тарифа.

Два подвоха, на которых горят:
  • Порог считается по организации, а не по конкретному разработчику. Сотрудник тысячной корпорации не может "поставить бесплатную версию под личным аккаунтом" - юридически лицензия всё равно нужна компании.
  • Платишь ты именно за Docker Desktop (обёртку с GUI и интеграциями), а не за движок. Поставил тот же Docker Engine руками в WSL2 или в Linux-VM без Desktop - формально под это соглашение не попадаешь.
Для РФ это особенно ощутимо. Оплата зарубежной подписки картой осложнена, а сам Docker Hub и сайт Docker периодически отдают ограничения по доступу из российских сетей. Поэтому в командах из РФ массово выбирают бесплатные альтернативы плюс зеркала и приватные реестры (Yandex Container Registry, VK Cloud Container Registry, корпоративный Harbor/Nexus) - но это отдельная большая тема следующих уроков.

Производительность файловой системы: почему bind mount тормозит на Mac и Windows

Самая частая жалоба новичков: "на Linux всё летает, а на маке docker mac тормозит". Дело не в Docker, а в той самой границе хост-VM.

Когда ты делаешь bind mount папки с хоста внутрь контейнера:

Код: Выделить всё

docker run -v $(pwd):/app node:22 npm install
файлы физически лежат не в Linux-VM, а на файловой системе хоста (APFS на маке, NTFS на винде). Контейнеру внутри VM приходится дотягиваться до них через прослойку, которая прокидывает файловые операции через границу. Каждый stat, каждое открытие файла - это round-trip между двумя ОС. Для одного большого файла не страшно. Но npm install, composer install, webpack или vendor с десятками тысяч мелких файлов превращают это в ад: на каждую крошечную операцию накладываются микросекунды задержки, и они складываются в десятки секунд.

Что с этим реально делают:
  • virtiofs вместо старых протоколов. Docker Desktop умеет VirtioFS - современный протокол шаринга файлов между VM и хостом, который в разы быстрее старого gRPC-FUSE. Включается в Settings -> Resources -> File sharing. На реальных бенчмарках 2025-2026 переход на virtiofs давал ускорение файловых операций в 2-3 раза.
  • Не монтировать тяжёлые папки с хоста вообще. node_modules, vendor, .venv держи в именованном томе, а не в bind mount. Том живёт внутри Linux-VM на родной ext4 - никакой границы, скорость нативная. Код монтируешь bind-ом (его мало и он меняется руками), а зависимости - в volume.
  • Не класть проект в /mnt/c на Windows. Это главная WSL2-граблина. Если репозиторий лежит на диске Windows (/mnt/c/...), доступ к нему из WSL2 идёт через медленный мост 9p. Перенеси проект внутрь файловой системы Linux-дистрибутива (например в ~/projects внутри Ubuntu) - и скорость вырастет на порядок. Правило простое: Linux-инструменты работают с Linux-файлами, Windows-инструменты с Windows-файлами, через границу не гоняем.
Пример тома вместо bind mount в compose.yaml:

Код: Выделить всё

services:
  app:
    image: node:22
    working_dir: /app
    volumes:
      - ./src:/app/src          # код - bind mount, его мало
      - node_modules:/app/node_modules  # зависимости - том, быстро
    command: npm run dev

volumes:
  node_modules:
Альтернативы Docker Desktop: rancher desktop, colima, Podman, OrbStack

Это смысловой центр урока. Все альтернативы решают ту же задачу - поднять Linux-VM и движок, - но без лицензионных оков и часто легче и быстрее.

Colima (Mac, Linux). "colima" = Containers on Lima. Терминальный, минималистичный, на базе проекта Lima (Linux VMs на Mac). GUI нет вообще - и для многих это плюс. Ставится через Homebrew, ест мало ресурсов. Запуск с быстрым шарингом файлов на Apple Silicon:

Код: Выделить всё

colima start --vm-type vz --mount-type virtiofs --cpu 4 --memory 8
Здесь vz - это нативный Virtualization.framework Apple, virtiofs - быстрый шаринг. Дефолтный sshfs в Colima медленный, поэтому virtiofs включай руками. После старта обычный docker CLI просто работает - Colima поднимает сокет, на который смотрит клиент. Выбор для тех, кто живёт в терминале и хочет полный контроль.

Rancher Desktop (Win, Mac, Linux). Бесплатный, open source, от SUSE. Главная фишка - встроенный Kubernetes (k3s) из коробки и выбор движка: containerd с CLI nerdctl или классический dockerd с docker CLI. На Windows "rancher desktop" использует тот же WSL2. Лучший выбор, если тебе важна локальная отладка под Kubernetes без отдельной возни.

Podman Desktop (Win, Mac, Linux). GUI поверх Podman от Red Hat. Идеологически другой: без демона (нет постоянного dockerd) и rootless по умолчанию - контейнеры запускаются без root, что заметно безопаснее. Команда podman почти стопроцентно совместима с docker (можно сделать alias docker=podman). Умеет генерировать Kubernetes-манифесты. Выбор, где во главе угла безопасность и совместимость с экосистемой Red Hat/OpenShift.

OrbStack (только Mac). Проприетарный, но с бесплатным тарифом для индивидуальных разработчиков. Главное достоинство - скорость: старт за пару секунд, минимальный расход батареи и памяти, очень быстрый файловый шаринг и сеть. Многие на маке считают его лучшей заменой Docker Desktop по ощущениям. Минус - закрытый код и не для всех бесплатно в коммерции.

Чистый WSL2 + Docker Engine (Windows). Самый "хардкорный" и полностью бесплатный путь: ставишь обычный Docker Engine руками внутрь дистрибутива WSL2, как на настоящем Linux-сервере, без Docker Desktop вообще:

Код: Выделить всё

# внутри WSL2 (Ubuntu)
curl -fsSL https://get.docker.com | sh
sudo service docker start
docker run hello-world
Никакого GUI, никакой лицензии Docker Desktop, поведение один в один как на проде. Минус - нет автостарта демона и интеграции из коробки, придётся настроить руками (systemd в WSL2 или service docker start). Зато ты получаешь именно тот опыт, что будет на сервере.

Проброс портов и томов через границу

С портами магия в том, что инструменты её прячут. Когда ты пишешь:

Код: Выделить всё

docker run -p 8080:80 nginx
контейнер слушает порт 80 внутри Linux-VM. Docker Desktop (и альтернативы) автоматически прокидывают этот порт дальше - из VM на localhost твоего хоста. Поэтому ты открываешь http://localhost:8080 в браузере Windows/Mac, хотя физически nginx живёт в виртуалке. Это две прокидки подряд: контейнер -> VM, VM -> хост. Большинство инструментов делают это прозрачно, но если порт "не открывается" - первым делом проверь, не занят ли он на хосте и проброшен ли вообще (docker ps покажет колонку PORTS вида 0.0.0.0:8080->80/tcp).

С томами всё тоже завязано на границу. Bind mount тянется до файлов хоста (медленно, см. выше), именованный том живёт внутри VM (быстро). В WSL2 есть ещё нюанс пути: /mnt/c/Users/... - это диск Windows через мост, а ~ - это родная Linux-ФС. Монтируй из родной.

Когда что выбирать
  • Mac, хочу "поставил и забыл", фирма маленькая или личное - Docker Desktop или OrbStack (OrbStack быстрее и легче).
  • Mac, терминальщик, полный контроль, бесплатно навсегда - Colima с vz+virtiofs.
  • Нужен локальный Kubernetes - Rancher Desktop.
  • Во главе безопасность, rootless, экосистема Red Hat - Podman Desktop.
  • Windows, нужна максимальная близость к проду и ноль лицензии - чистый WSL2 + Docker Engine.
  • Крупная компания (>250 человек или >10 млн выручки) - либо платный Docker Desktop, либо любая бесплатная альтернатива. В РФ из-за проблем с оплатой и доступом чаще берут вторую опцию.
Типичные грабли и антипаттерны
  • Проект на /mnt/c в WSL2. Классика тормозов. Держи код внутри Linux-ФС.
  • Тяжёлые зависимости в bind mount на Mac/Win. node_modules и vendor - в именованный том, иначе install идёт минутами.
  • "Бесплатный" Docker Desktop в большой компании. Это нарушение лицензии, а не лайфхак. Юристы вашего работодателя такое не любят.
  • Образ собран на Apple Silicon без --platform. Получишь arm64, на amd64-сервере он не запустится. Указывай docker build --platform linux/amd64 или собирай мультиарх через buildx.
  • Раздутая VM. По умолчанию виртуалка может отъесть много RAM. Ограничивай ресурсы в настройках или флагами (Colima --cpu/--memory), особенно на ноутбуке.
  • Смешивание движков. Поставил и Docker Desktop, и Colima/Rancher - и не понимаешь, к какому демону цепляется docker. Проверяй docker context ls и активный контекст.
Мини-лаба: почувствуй границу руками
  • Узнай, где живёт твой движок: docker context ls и docker info (поле "Operating System" покажет Linux, даже если ты на Mac/Windows - вот она, VM).
  • На Windows: wsl -l -v, убедись что версия 2. Положи тестовый проект сначала в /mnt/c, потом в ~ внутри Ubuntu и сравни время npm install в контейнере.
  • Сравни bind mount и том: подними один контейнер с -v $(pwd):/app, другой с именованным томом, прогони установку зависимостей и засеки время.
  • Проверь проброс: docker run -d -p 8080:80 nginx, открой http://localhost:8080, посмотри docker ps - колонку PORTS.
  • Если на Mac - поставь Colima (brew install colima docker), запусти colima start --vm-type vz --mount-type virtiofs и убедись, что docker ps работает без Docker Desktop вообще.
Контрольные вопросы
  • Почему Docker на Windows и Mac всегда подразумевает запущенную Linux-виртуалку, и что конкретно она содержит?
  • Чем отличается доступ к файлам через bind mount от именованного тома на Mac/Win, и почему второй быстрее?
  • При каких порогах организации Docker Desktop перестаёт быть бесплатным, и платишь ли ты за сам движок?
  • Когда выберешь Rancher Desktop, когда Colima, а когда чистый WSL2 + Docker Engine?
Итог

Запомни главное: на не-Linux Docker - это всегда пульт + спрятанная Linux-VM, и почти все боли (тормоза ФС, проброс портов и томов) растут из границы между хостом и этой виртуалкой. Docker Desktop удобен, но платен для крупных и непрост по доступу в РФ. Бесплатные colima, rancher desktop, Podman Desktop, OrbStack и чистый WSL2 + Engine закрывают те же задачи - выбирай под сценарий: терминал, Kubernetes, безопасность, скорость или близость к проду.
👍5 ❤️2 🔥2 😄 🤔1
Аватара пользователя
mokogrey
Сообщения: 1
Зарегистрирован: 22 май 2026, 08:45

Re: Docker Desktop, WSL2 и альтернативы на Windows и Mac

Сообщение mokogrey »

Блин, вот про /mnt/c прям про меня - держал репо на диске Windows и проклинал docker wsl2 за тормоза. Перенёс в ~ внутри Ubuntu, install ускорился в разы. Спасибо что разжевали границу.
👍1 ❤️ 🔥 😄 🤔2
Аватара пользователя
react77
Сообщения: 1
Зарегистрирован: 07 июн 2026, 09:14

Re: Docker Desktop, WSL2 и альтернативы на Windows и Mac

Сообщение react77 »

А правильно понимаю, что если у нас в конторе человек 300, то бесплатный Docker Desktop уже нельзя, и проще всем перейти на colima/rancher desktop, чем покупать лицензию из РФ? По доступности оплаты как раз боль.
👍 ❤️ 🔥1 😄 🤔1
Ответить
← Предыдущая глава
Производительность и эксплуатация Docker-хоста
Следующая глава →
Контейнеризация приложений: бэкенд, фронтенд, БД

Все главы курса «Docker: контейнеризация от основ до продакшена»

Поделиться темой: ✈ Telegram VK

Вернуться в «Docker с нуля»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость