12k
All articles

5 альтернатив Docker для локальной разработки

Сравните пять альтернатив Docker Desktop для локальной разработки: Podman, OrbStack, Colima, Rancher Desktop и Lima. Узнайте о системах, цене и совместимости с Docker и Compose.

OpenReplay Team
OpenReplay Team
5 альтернатив Docker для локальной разработки

Для локальной разработки стоит протестировать пять альтернатив Docker Desktop: Podman с Podman Desktop, OrbStack, Colima, Rancher Desktop и Lima с nerdctl. Лишь некоторые из них оставляют за вашими командами docker настоящий Docker Engine.

Возможно, вентиляторы раскручиваются, стоит только запустить контейнер с Postgres. Или кто-то из финансового отдела поинтересовался, за сколько лицензий Docker Desktop платит компания. В любом случае вам нужно понять, какая замена по-прежнему справится с вашими скриптами docker run и Compose-файлом.

Основы работы с образами и контейнерами в этом сравнении не рассматриваются — о них рассказывает руководство для начинающих по образам и контейнерам Docker. Каждый инструмент оценивается по одним и тем же критериям: поддерживаемые операционные системы, стоимость, движок, совместимость с docker CLI, совместимость с Compose, для кого он подходит, а также команды для установки и запуска первого контейнера.

Ключевые выводы

  • Docker Desktop бесплатен для компаний, в которых работает меньше 250 сотрудников и годовая выручка составляет менее 10 млн долларов. Более крупным компаниям нужна платная подписка Pro, Team или Business.
  • OrbStack и Colima (в режиме по умолчанию) запускают Docker Engine в более легковесной ВМ. Podman и containerd с nerdctl полностью заменяют движок.
  • На macOS и Windows все инструменты из этого сравнения по-прежнему запускают Linux-контейнеры внутри виртуальной машины.
  • Команда podman compose существует, но передаёт работу внешнему провайдеру (docker-compose или podman-compose), и один из них должен быть установлен.
  • Если после смены инструмента docker перестал работать, выполните docker context ls, чтобы увидеть, на какой эндпоинт движка указывает CLI.

Почему разработчики ищут альтернативы Docker для локальной работы?

Обычно разработчики отказываются от Docker Desktop по одной из трёх причин: лицензирование, потребление ресурсов или скорость работы с файлами на macOS.

  • Лицензия. Согласно условиям лицензии Docker Desktop, приложение бесплатно для личного использования, образования, некоммерческих open-source-проектов и компаний, в которых работает меньше 250 сотрудников и годовая выручка составляет менее 10 млн долларов. Компании, превышающей любой из этих порогов, нужна платная подписка Pro, Team или Business.
  • Память и батарея. На macOS и Windows Docker Desktop держит запущенной Linux-ВМ, пока работает хотя бы один контейнер, и эта ВМ потребляет память и энергию, даже когда контейнеры простаивают. Режим Resource Saver в Docker Desktop останавливает ВМ, только если контейнеры не запускались в течение некоторого времени (по умолчанию пять минут).
  • Bind mounts. На macOS файлы, примонтированные с хоста в контейнер, вынуждены пересекать границу ВМ. В документации Docker прямо отмечается, что по мере роста кодовой базы bind mounts могут работать медленно, — именно поэтому в Docker Desktop появились синхронизированные общие папки (synchronized file shares). Замедление особенно заметно на больших деревьях node_modules и при работе file watchers.

Что на самом деле заменяет каждая альтернатива Docker?

Docker Desktop — это десктопное приложение, объединяющее Linux-ВМ, Docker Engine и графический интерфейс. Заменить Docker Desktop не означает заменить Docker Engine. Альтернативы делятся на две группы:

ГруппаИнструментыС чем взаимодействует команда docker
Docker Engine в более легковесной ВМOrbStack, Colima (среда выполнения по умолчанию), Rancher Desktop (режим moby)С настоящим демоном Docker
Движок заменёнPodman, Lima/containerd с nerdctl, Rancher Desktop (режим containerd)С Docker-совместимым API Podman, а в случае nerdctl — ни с чем. В основном вы используете CLI, копирующий синтаксис Docker

В группе с Docker Engine docker CLI и Compose продолжают работать с демоном Docker. В группе с заменённым движком совместимость с Docker обеспечивается слоем командной строки, повторяющим синтаксис Docker, а в случае Podman — ещё и сокетом, который отвечает на вызовы Docker API. На macOS и Windows все перечисленные инструменты по-прежнему запускают Linux-контейнеры внутри ВМ. Смена инструмента меняет то, как управляется эта ВМ, но не избавляет от неё.

Почему docker перестаёт работать после смены инструмента?

docker CLI подключается к тому сокету, на который указывает переменная DOCKER_HOST или активный контекст Docker. Если после установки альтернативы команды завершаются с ошибкой, скорее всего, CLI направлен на сокет, за которым нет движка. Наше руководство по устранению ошибок «Docker daemon not running» подробно разбирает сообщения об ошибках.

docker context ls          # the active endpoint is marked with *
docker context use colima  # point the CLI at another engine

Протестировать альтернативу можно, не удаляя Docker Desktop. Переключите контекст, чтобы опробовать новый инструмент, а затем переключитесь обратно.

Compose-файл для проверки каждого инструмента

Используйте один минимальный файл для проверки всех инструментов. Предварительно прогоните его через валидатор YAML, чтобы любая ошибка была вызвана инструментом, а не опечаткой.

# compose.yaml
services:
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example
    ports:
      - "5432:5432"

Сравнение альтернатив Docker

ИнструментОССтоимостьДвижокdocker CLICompose
Podman + Podman DesktopmacOS, Windows, LinuxБесплатно, open sourcePodmanЧерез алиас или API-сокетpodman compose + провайдер
OrbStackmacOSБесплатно для личного использования, платно для коммерческогоDocker EngineДаДа, входит в комплект
ColimamacOS, LinuxБесплатно, open sourceDocker (по умолчанию)Да, устанавливается отдельноCompose устанавливается отдельно
Rancher DesktopmacOS, Windows, LinuxБесплатноcontainerd или mobyВ режиме mobynerdctl compose или docker compose
Lima + nerdctlmacOS, LinuxБесплатно, open sourcecontainerdНет (nerdctl)nerdctl compose

Podman с Podman Desktop

Podman заменяет движок Docker и работает без демона. Podman Desktop — бесплатное приложение с открытым исходным кодом для macOS, Windows и Linux. На Mac и Windows вы получаете нативную команду podman, а контейнеры работают в Linux-ВМ, которую Podman называет Podman machine.

  • docker CLI: команды Podman используют синтаксис Docker, поэтому alias docker=podman покрывает большую часть повседневных задач. На Mac и Windows Podman также принимает запросы от клиентов Docker API, так что вместо алиаса можно направить на его сокет настоящий docker CLI и инструменты, работающие с Docker.
  • Compose: команда podman compose встроена, но это тонкая обёртка, передающая работу docker-compose или podman-compose. Сначала установите один из них.
  • Кому подходит: командам, которым нужен один бесплатный инструмент для macOS, Windows и Linux.
brew install podman
podman machine init
podman machine start
podman run --rm hello-world
podman compose up

Документация по установке Podman рекомендует на macOS использовать официальный установщик, а не Homebrew. У Podman Desktop собственный установщик.

OrbStack

OrbStack — приложение только для macOS. Оно поставляется с движком Docker и инструментами Compose и стремится вести себя как Docker Desktop, поэтому docker CLI и Compose работают без изменений.

  • Стоимость: согласно условиям лицензирования OrbStack, инструмент бесплатен для личного использования. Для фриланса, бизнеса и некоммерческих организаций требуется платная лицензия на каждого пользователя.
  • Compose: входит в комплект.
  • Кому подходит: командам, работающим только на Mac, которым нужен привычный рабочий процесс Docker Desktop с другим слоем виртуализации. Конфигурации на уровне проекта, такие как Dev Containers для локальной разработки, тоже продолжают работать.
brew install --cask orbstack
docker run --rm hello-world
docker compose up

Colima

Colima — бесплатный инструмент командной строки для macOS (Intel и Apple Silicon) и Linux. Со средой выполнения Docker, используемой по умолчанию, Colima запускает движок Docker внутри ВМ. Также доступны среды выполнения containerd и Incus.

  • docker CLI: устанавливается отдельно.
  • Compose: не входит в комплект. Установите формулу docker-compose из Homebrew, а затем создайте на неё ссылку в ~/.docker/cli-plugins, чтобы работала команда docker compose.
  • Кому подходит: разработчикам, которые живут в терминале и не нуждаются в GUI.
brew install colima docker docker-compose
mkdir -p ~/.docker/cli-plugins
ln -sfn "$(brew --prefix)/opt/docker-compose/bin/docker-compose" ~/.docker/cli-plugins/docker-compose
colima start
docker run --rm hello-world
docker compose up

Если запустить Colima со средой выполнения containerd, контейнеры запускаются через colima nerdctl, а не через docker.

Rancher Desktop

Rancher Desktop работает на macOS (Intel и Apple Silicon), Windows и Linux. В качестве движка Rancher Desktop может использовать containerd или dockerd (moby). При выборе moby включается Docker API, и docker CLI работает без алиасов.

  • Compose: в руководстве по работе с контейнерами описано использование Compose как через nerdctl compose, так и через docker compose.
  • Нюансы: одновременно активна только одна среда выполнения. Образы, загруженные в одной среде, недоступны после переключения на другую. Встроенный Kubernetes можно отключить.
  • Кому подходит: кроссплатформенным командам, которым нужны GUI и Docker API.
rdctl set --container-engine.name=moby
docker run --rm hello-world

То же изменение можно внести в приложении в разделе Preferences > Container Engine, как описано в документации по настройкам движка.

Lima с containerd и nerdctl

Lima запускает виртуальные машины Linux с автоматическим общим доступом к файлам и пробросом портов. Шаблон по умолчанию использует containerd. Lima также поддерживает хосты помимо macOS, например Linux и NetBSD.

  • docker CLI: не используется. nerdctl повторяет команды Docker и вызывается как lima nerdctl.
  • Compose: nerdctl compose реализует спецификацию Compose. Некоторые поля, например links, не реализованы — их список приведён в заметках nerdctl о Compose.
  • Кому подходит: разработчикам, которые предпочитают собирать стек из open-source-компонентов самостоятельно. Если вы всё же хотите запускать Docker Engine, у Lima есть шаблон docker.
brew install lima
limactl start
lima nerdctl run --rm hello-world
lima nerdctl compose up

Как выбрать альтернативу Docker?

Операционная система отсекает часть альтернатив ещё до сравнения возможностей. OrbStack работает только на macOS, а у Colima нет сборки для Windows. Если нужен один инструмент для macOS, Windows и Linux, остаются Podman Desktop и Rancher Desktop. Если ваши Compose-файлы и скрипты должны работать без изменений, выбирайте инструмент с Docker Engine: OrbStack, Colima или Rancher Desktop в режиме moby. Если же вы хотите полностью отказаться от демона Docker, выбирайте Podman.

Заключение

Главный вопрос — сохраняет инструмент Docker Engine или заменяет его. Именно это различие определяет, перенесутся ли ваши команды docker и Compose-файлы без изменений. Выберите инструмент, подходящий под вашу ОС и лицензионную ситуацию, прогоните на нём приведённый выше compose.yaml и проверьте docker context ls, прежде чем удалять Docker Desktop.

Часто задаваемые вопросы

Распространяется ли лицензия Docker Desktop на Docker Engine в Linux?

Нет. Docker Engine распространяется с открытым исходным кодом под лицензией Apache License 2.0, поэтому для коммерческого использования нет ограничений по числу сотрудников или выручке. Пороги в 250 сотрудников и 10 млн долларов взяты из Docker Subscription Service Agreement, которое распространяется на Docker Desktop и поставляемый внутри него Engine. На рабочей станции с Linux прямая установка Docker Engine снимает вопрос о лицензии Desktop и избавляет от лишнего слоя ВМ.

Переносятся ли образы и тома Docker Desktop при смене инструмента?

Автоматически их переносит только OrbStack. После установки он предлагает скопировать контейнеры, тома и образы Docker Desktop, а эта опция остаётся доступной в меню File > Migrate Docker Data. Создаётся копия, поэтому исходные данные остаются на месте. Для Colima, Podman или Rancher Desktop экспортируйте образы с помощью docker save, загрузите их в новый движок, а именованные тома сохраните в виде tar-архивов.

Работает ли Testcontainers с Podman вместо Docker?

Да, через Docker-совместимый API-сокет Podman. Укажите в DOCKER_HOST сокет Podman. На macOS путь к нему можно получить командой podman machine inspect; кроме того, нужно задать TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE со значением /var/run/docker.sock. В Linux сокет находится по пути podman/podman.sock внутри XDG_RUNTIME_DIR. В rootless-режиме задайте TESTCONTAINERS_RYUK_DISABLED=true, чтобы отключить контейнер очистки Ryuk. Команда Testcontainers не тестирует альтернативные среды выполнения на регулярной основе, поэтому некоторые функции могут не работать.

Могут ли VS Code Dev Containers использовать Podman вместо Docker?

Да. Установите для параметра Dev Containers Docker Path (dev.containers.dockerPath) значение podman в Linux, Windows или macOS. Расширение выполняет команды CLI контейнеров и никогда не обращается к демону напрямую. По описанию VS Code, Podman 5 и более поздние версии в основном совместимы с CLI Docker, однако другие Docker-совместимые CLI официально не поддерживаются. Для dev-контейнеров на основе Compose также необходимо настроить провайдер Compose.

DevTools for the frontend

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers.

Star on GitHub12k

We use cookies to improve your experience. By using our site, you accept cookies.