Використовувати Docker Desktop означає ніколи не відкривати термінал або командний рядок у Windows 11. Я насолоджувався цією зручністю, поки не відкрив диспетчер завдань, щоб щось перевірити, і не зрозумів, що допоміжні процеси програми використовують більше ГБ пам’яті на моєму робочому столі. І я навіть нічого не готував і не подавав. Я припустив, що зупинка контейнера звільнить ресурси.
У Windows 11 все працює інакше. Операційна система використовує рівень віртуалізації, який ніколи не потрібен Linux, а Docker Desktop додає ще один рівень, особливо після того, як я запустив WSL2 для більшості завдань. Я хотів би знати, скільки насправді коштує Docker Desktop. Тож я видалив його зі свого робочого столу та запустив той самий стек контейнерів через WSL2.
Docker Desktop працював у фоновому режимі
Запуск двох рівнів віртуалізації на контейнер
Я припускав, що Docker Desktop схожий на будь-яку іншу програму, але коли я відкрив диспетчер завдань, це була не просто ще одна піктограма в треї. У цьому списку я знайшов кілька процесів серверної системи, мережевий помічник під назвою vpnkit і менеджер облікових даних. Дивним було те, що ці речі працювали навіть за відсутності активного контейнера. Збереження ресурсів видаляє частину цього, коли щось не працює, але не видаляє все. Усі ці процеси повертаються, коли я відкриваю панель керування або створюю новий контейнер.
Це відбувається тому, що Docker Desktop встановлює власний дистрибутив Linux, коли я його встановлюю, і використовує їх щоразу, коли я відкриваю програму. На одному зберігається фактичний механізм, на іншому зберігаються зображення, контейнери та томи. Перевірка мого списку дистрибутивів WSL підтвердила це: docker-desktop і docker-desktop-data знаходяться поруч із Ubuntu, дистрибутивом, яким я фактично користуюся.
Тим часом Windows уже запускає полегшену віртуальну машину для запуску WSL2, а Docker Desktop запускає другу всередині цієї віртуальної машини, щоб розмістити її механізм. Тому я запускаю два рівні віртуалізації, щоб робити те, що може робити спільне ядро як кілька окремих процесів у реальному Linux. Ну, це угода, яку я підписав, коли встановлював його. Я не усвідомлював, скільки мені це коштувало, поки не спробував.
Запуск контейнерів безпосередньо через WSL2 змінив усе
Значно менше ресурсів на робоче навантаження
Я змінив свій підхід, щоб побачити, чи справді ці витрати потрібні. Я встановив механізм Docker безпосередньо на моєму Ubuntu WSL і повністю пропустив інсталятор Docker Desktop. Я запустив офіційний сценарій встановлення Docker, щоб розгорнути його у своєму дистрибутиві WSL. Після цього я розгорнув своє звичайне сховище контейнерів, наприклад Jellyfin, Caddy proxy, Postgres і Syncthing. Потім я дозволив цим контейнерам працювати кілька годин, перш ніж перевірити використання пам’яті в диспетчері завдань.
Різниця була незначною, оскільки Docker Desktop вже використовував більше ГБ пам’яті до запуску одного контейнера. На відміну від цього, той самий стек, що працює на простому дистрибутиві WSL, додав лише кілька сотень Мбайт поверх неактивної інсталяції. Фонові процеси Docker Desktop перевантажували ЦП, навіть коли нічого не було потрібно. Параметри WSL2 вимкнено, якщо контейнер не виконує активне завдання. Відмова від другого рівня віртуалізації означала, що віртуальна машина WSL2 повинна була виконати цю роботу замість двох.
Швидкість ніколи не була справжньою проблемою
Незалежно від часу завантаження важливіше
Оскільки все, що робить GUI, знаходиться за лаштунками, легко припустити, що Docker Desktop працює повільніше. Навіть з оригінальною інсталяцією WSL інструменти контейнера все ще показували той самий час запуску. Деякі контейнери завантажувалися швидше, але це не змінювало те, як я з ними працював.
Мене більше хвилювали накладні витрати, які накопичуватимуться після роботи з контейнерами цілий день, ніж додаткова секунда-дві часу. Коли мій контейнер заповнений і не використовується активно, він простоює годинами. Цей простой — це те, що насправді коштує вам ресурсів, а не саме завантаження. Я не вимірював це раніше, і це виявилося важливішим за все інше.
Розгортання Desktop Docker все ще викликає деякі суперечки
Вибір терміналу над панеллю має свою ціну
Видалення Docker Desktop не є чистою перемогою, оскільки я втрачаю перегляд інформаційної панелі кожного контейнера, зображення та обсяг з першого погляду. Docker Desktop дозволяє запускати або зупиняти контейнери одним клацанням миші. Тим часом я зараз керую цим стеком через термінал. Якщо ви вже знайомі з командним рядком, це не є великою проблемою. Але GUI допомагає, якщо вам потрібні зручні параметри.
Одна неприємність, з якою я зіткнувся, це налаштування спільного доступу до файлів. Використання Docker Desktop у Windows 11 дозволяє легко встановлювати цільові папки з налаштувань програми. Я мав би звернутися до папок. На відміну від цього, мені доводиться вручну переходити до шляхів Windows і WSL, оскільки вони не вибираються автоматично. Трохи засмучений тим, що я більше не можу запускати команди Docker з будь-якого терміналу, це те, що інтеграція Windows обробляла автоматично.
Docker Desktop підключив його у фоновому режимі, щоб я міг використовувати PowerShell або командний рядок. З одного боку, я зберігаю ресурси, але з іншого боку, я обмежений ручним налаштуванням речей для певного терміналу.
Чи вартий Docker Desktop того?
Так, я вирішив зберегти його. Більшість моїх контейнерів безперервно працюють на машині, яка робить дуже мало. Різниця між одним і двома рівнями віртуалізації зростає з кожним днем. Якщо ваш робочий процес включає активні сеанси розробки, тоді має сенс зберегти Docker Desktop. Зручність панелі інструментів вартує додаткової пам’яті, яку використовує Docker Desktop. Я встановлюю Docker Desktop для проекту, якому потрібен графічний інтерфейс. Все інше, що працює всередині дистрибутива WSL2, довгоживе.