Домой Новости Запуск Docker через WSL вместо Docker Desktop: сокращение потребления ресурсов и нюансы

Запуск Docker через WSL вместо Docker Desktop: сокращение потребления ресурсов и нюансы

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

5
0

Использование Docker Desktop на Windows 11 долгое время казалось оптимальным решением, избавляющим от необходимости работать с командной строкой. Однако проверка системных процессов в «Диспетчере задач» показала, что вспомогательные службы Docker Desktop потребляют более 1 ГБ оперативной памяти, даже когда контейнеры не запущены. Причиной такой нагрузки является многослойная виртуализация: операционная система уже использует виртуальную машину для работы WSL2, а Docker Desktop запускает второй слой виртуализации поверх первого.

Запуск контейнеров Docker в среде WSL2
Docker Desktop запускает множество контейнеров

Почему Docker Desktop потребляет лишние ресурсы

При установке Docker Desktop в систему добавляются дополнительные дистрибутивы WSL, такие как docker-desktop и docker-desktop-data, которые работают параллельно с основными рабочими окружениями, например, Ubuntu. Это приводит к тому, что для работы одного контейнера фактически задействуются два слоя виртуализации. Даже при активации функции Resource Saver часть фоновых процессов, включая сетевой помощник vpnkit, менеджер учетных данных и движки бэкенда, продолжает функционировать, постоянно нагружая процессор и память.

Преимущества прямого использования Docker в WSL2

Чтобы оценить объем лишних ресурсов, я удалил Docker Desktop и установил движок Docker напрямую в дистрибутив Ubuntu под управлением WSL2, воспользовавшись официальным скриптом установки. После запуска стандартного стека контейнеров, включающего Jellyfin, прокси-сервер Caddy, базу данных Postgres и Syncthing, потребление оперативной памяти оказалось значительно ниже. Если Docker Desktop занимал более 1 ГБ еще до старта контейнеров, то «чистый» Docker внутри WSL2 добавил лишь несколько сотен мегабайт к базовой нагрузке дистрибутива.

Более того, при использовании Docker Desktop фоновые процессы периодически пробуждали процессор без реальной необходимости. В конфигурации с использованием только WSL2 система остается в режиме ожидания, пока контейнеры не выполняют активных задач. Важно отметить, что разница в скорости запуска самих контейнеров между двумя методами оказалась незначительной. Основной выигрыш заключается именно в сокращении потребления ресурсов при длительной работе в фоновом режиме, а не в скорости старта.

запуск Docker через WSL — иллюстрация 2 к материалу
Слой виртуализации Docker в Linux

Трудности отказа от графической панели управления

Отказ от Docker Desktop не является однозначным преимуществом, так как пользователь теряет наглядный графический дашборд. В Docker Desktop управление всеми контейнерами, образами и томами осуществляется в один клик, тогда как при работе с WSL2 все операции необходимо выполнять через терминал. Это требует навыков работы с командной строкой, что может быть неудобно для пользователей, привыкших к визуальному интерфейсу.

запуск Docker через WSL — иллюстрация 3 к материалу
Docker Desktop занимает значительный объем памяти в Windows

Также возникают сложности с настройкой файлового обмена. В Docker Desktop указание целевых папок осуществляется через настройки приложения, в то время как при работе через WSL приходится вручную прописывать пути между Windows и WSL. Кроме того, Docker Desktop автоматически настраивает интеграцию, позволяя выполнять команды из PowerShell или командной строки Windows, что при ручной установке требует дополнительной конфигурации для каждого терминала отдельно.

Стоит ли использовать Docker Desktop

Решение о том, оставлять ли Docker Desktop, зависит от характера задач. Если ваша работа связана с активными сессиями разработки, удобство дашборда оправдывает повышенное потребление памяти. Однако для проектов, которые работают в фоновом режиме длительное время, запуск через «чистый» WSL2 выглядит более рациональным. В итоге я сохранил Docker Desktop для одного конкретного проекта, требующего графического интерфейса, в то время как все остальные долгосрочные сервисы были перенесены в обычный дистрибутив WSL2.

запуск Docker через WSL — иллюстрация 4 к материалу
Использование ресурсов в Диспетчере задач Windows 11

Архитектурные особенности: что скрыто в фоновых процессах

Когда я впервые открыл «Диспетчер задач», надеясь найти там лишь иконку в трее, меня ждал неприятный сюрприз. Список процессов Docker Desktop оказался весьма внушительным даже в периоды полного простоя. Помимо упомянутого vpnkit, там обнаружились backend engine, отвечающий за работу движка, и выделенный менеджер учетных данных (credential manager). Оказалось, что даже если вы не используете функцию Resource Saver, архитектура приложения подразумевает наличие этих процессов «по умолчанию».

запуск Docker через WSL — иллюстрация 5 к материалу
Настройки интеграции Docker с WSL

Причина такого поведения кроется в способе развертывания Docker Desktop в среде Windows 11. Установка программы автоматически создает два специализированных Linux-дистрибутива, которые прописываются в вашей системе наряду с привычными рабочими средами, например, Ubuntu. Первый дистрибутив (docker-desktop) выступает хостом для движка контейнеризации, а второй (docker-desktop-data) предназначен для хранения образов, томов и самих контейнеров. Таким образом, Windows 11 вынуждена постоянно поддерживать функционирование этих окружений, даже если вы не запустили ни одной задачи.

запуск Docker через WSL — иллюстрация 6 к материалу

Цена удобства: управление файлами и окружением

Одной из наиболее заметных проблем при переходе на «чистый» WSL2 стало управление файловой системой. В Docker Desktop реализован удобный механизм проброса путей: вы просто указываете целевую папку в настройках приложения, и Docker автоматически берет на себя все заботы по монтированию. В случае с прямой установкой Docker внутри дистрибутива WSL пользователю приходится вручную ссылаться на пути между файловой системой Windows и виртуальным окружением Linux.

запуск Docker через WSL — иллюстрация 7 к материалу
Контейнеры Docker, запущенные в WSL2

Дополнительное раздражение вызывает отсутствие автоматической интеграции с системными терминалами. Docker Desktop «из коробки» настраивает среду таким образом, что команды docker становятся доступны в PowerShell и командной строке (Command Prompt) Windows автоматически. При самостоятельном развертывании движка в WSL2 эта интеграция пропадает. Вам придется либо ограничиваться исключительно терминалом внутри самого дистрибутива, либо самостоятельно настраивать переменные окружения и пути для каждого терминала, который вы привыкли использовать в Windows.

Ресурсы против продуктивности: так ли важна скорость?

Часто можно услышать аргумент о том, что использование Docker Desktop замедляет работу контейнеров по сравнению с нативной установкой. Мои наблюдения показали, что скорость старта контейнеров в обоих случаях практически идентична. Разница в одну или две секунды при запуске не является критичной для рабочего процесса. Гораздо важнее то, что происходит после загрузки.

запуск Docker через WSL — иллюстрация 8 к материалу
Docker и WSL в терминале

Основная проблема заключается в «накопленном» потреблении ресурсов. В режиме разработки мы часто запускаем контейнер один раз и оставляем его работать в фоновом режиме на много часов. Именно этот простой (idle time) становится главным потребителем оперативной памяти и ресурсов процессора. В конфигурации с Docker Desktop фоновые процессы периодически «просыпаются», создавая избыточную нагрузку на CPU даже тогда, когда контейнеры не выполняют никаких активных вычислений. Переход на прямую установку внутри WSL2 исключает этот паразитный шум, позволяя системе работать тише и стабильнее.

запуск Docker через WSL — иллюстрация 9 к материалу
Docker Desktop выбирает WSL2 по умолчанию

Несмотря на все выявленные недостатки, Docker Desktop остается мощным инструментом для быстрой разработки. Это не просто GUI — это готовое решение «все-в-одном», которое берет на себя настройку проброса портов, управление файловой системой и интеграцию с Windows. Его регулярные обновления, включающие патчи безопасности и исправления ошибок, значительно упрощают жизнь разработчику, позволяя сфокусироваться на написании кода, а не на администрировании среды.