Docker Desktop для Ubuntu: установка, минусы и альтернатива
Всех приветствую. Переустанавливая Убунту, подумал, почему бы не попробовать Docker Desktop в этот раз, ведь он уже должен быть в приемлимом для использования состоянии. Для чего он может пригодиться, спросите вы? Как-то я насоздавал кучу volumes и разных images примерно одного и того же, и чистить это было не в удовольствие, хоть и есть специальные команды для этого, но зачем до такого доводить, не лучше было бы иметь какой-то UI, чтобы следить за всем и по необходимости сразу удалять?
Казалось бы, раз на Linux с docker нет никаких проблем, то и с Docker Desktop (далее DD) не должно быть, но не тут то было. Будем подразумевать, что у вас уже установлен docker, если нет, то вот ссылка на гайд со всеми нужными вам командами и способами. Ну что же, приступим.
UPD: В комментариях поправили, что docker для работы Docker Desktop не нужен, но т.к. (спойлер) я рекомендую в конце его снести и просто подключить другую UI к обычному докеру, и т.к. даже в оф. документации DD подразумевается его наличие и упомянуто как отключить обычный docker, то я оставлю это как есть.
1. Требования
У Docker Desktop есть куча требований для того, чтобы он нормально работал на Ubuntu. С них и начнем, по порядку.
ЦП должен быть 64 битным и иметь поддержку виртуализации. Как ее включить в вашем UEFI найдете в интернете.
Должна быть поддержка KVM виртуализации. На практике она должна быть, если вы в UEFI включили виртуализацию. Проверяется
modprobe kvm
,kvm-ok
илиlsmod | grep kvm
. Также нужно добавить себя в группуkvm udo usermod -aG kvm $USER
.Куча неважных на практике требований. Такие, как QEMU версии 5.2 или выше, systemd init system, GNOME/KDE/Mate ГУИ Линукса, как минимум 4 гб оперативки. На деле же это все и так выполняется, если у вас Ubuntu 22.04, которую DD и требует (также он допускает 21.10, но думаю там с этим тоже все в порядке).
Должен быть включен File sharing. Еще одна неведомая вещь (маппинг айдишников), которая на практике у меня уже была в порядке на 22.04 версии. Подробнее можете прочитать здесь. Советую просто проверить, что вывод этих команд у вас такой, если так и есть, то можете двигаться дальше.
$echo $USER- exampleuser$cat /etc/subuid- exampleuser:100000:65536$cat /etc/subgid- exampleuser:100000:65536
Рекомендуется инициализировать менеджер паролей pass. Честно, никогда им не пользовался, но для гайда открыл. Пишите команду
gpg --generate-key
, вводите свои данные, копируете id из ответа командыто что вместо <generated_gpg-id_public_key> После чего пишите команду
pass init <your_generated_gpg-id_public_key>
И после этого он будет у вас иногда спрашивать указанный пароль при запуске DD и некоторых команд. Честно не совсем понял для чего это надо, говорят для использования приватных images вашего докер аккаунта, но кто вообще загружает свои images, да и зачем тогда в самом приложении просить вводить логин/пароль, этот момент я не совсем понял, но кто хочет - можете повторить, подробнее здесь.
2. Установка
Все, кажется все самое страшное позади, пора приступить к установке. Качаете deb package. Пишите команду sudo apt-get install ./docker-desktop--...
и можете открывать появившееся приложение в списке приложений. Принимаете соглашения, логинитесь, вводите пароли, все как обычно, после этого у вас должно быть работающее приложение.
3. Как использовать?
Во-первых, с установкой DD он поставит docker compose v2, который отличается от привычного тем, что больше нет тире в команде docker-compose
. Если сейчас вы запустите какой-нибудь компоуз или докер файлик, то вы не увидите ничего в приложении. Почему? Потому что у DD и обычного докера разные контексты. Как начать работать с контекстом DD? Напишите команду docker context use desktop-linux
и после этого можете вводить привычные вам команды в терминал и все действия будут отображаться в DD.
UPD: Поправили в комментариях что при запуске DD сам меняет контекст, хотя я точно помню, что раньше читал про необходимость самому сменять, но наверное я набрал в терминал команду до полного старта приложения, думаю в любом случае знать об этом не помешает, также как и сменить лишний раз вручную перед запуском команды.
4. Итог
Очень много танцев с бубнами, и ради чего? Чтобы пользоваться ГУИшкой докера? Какая-то высокая цена, учитывая также, что включение виртуализации ради этого кажется не очень разумным в том числе (особенно для тех, кто делал себе dual boot по-моему предыдущему гайду и использует Винду для игр, тогда виртуализация тормозит ЦП и вообще говорят открывает какие-то дырки в безопасности, которые вряд-ли кого-то волнуют).
5. Что же делать?
Сносим к чертям DD. Для этого тоже придется немного потанцевать. Во-первых, вводим команду sudo apt remove docker-desktop
, далее еще пару команд:
rm -r $HOME/.docker/desktopsudo rm /usr/local/bin/com.docker.clisudo apt purge docker-desktop
И после этого удаляем поля credsStore
и currentContext
в файлике $HOME/.docker/config.json
. Поздравляю вас, вы успешно избавились от ненужного вам DD, можете отключать виртуализацию (если она вам не нужна) и устанавливать более легковесное решение.
6. Альтернатива
К сожалению, перед тем как это все проделывать, я не знал, что существует более легковесное решение, работающее с дефолтным контекстом, а значит не нужно танцевать с бубнами. Называется оно "Portainer". Устанавливается в 2 клика: Создаем volume docker volume create portainer_data
и скачиваем image:
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
Единственные требования - это открытые порты 8000 и 9443, но и то их можно перенаправить в данной команде, и sudo доступ. Далее заходим на https://localhost:9443
и вводим имя пользователя и пароль, далее нас перекинет в админ панель, которая ничем не уступает DD, по крайней мере на мой первый взгляд. Запускаться будет автоматически с запуском докера, но и это поведение можно исправить в этом же приложении, изменив поле "restart" у контейнера portainer.
Ну что же, надеюсь эта статья также будет кому‑то полезна, ведь теперь по прежнему можно вызывать все команды из терминала, периодически заходя в portainer и поглядывая, что вы не наплодили слишком много images и volumes, и что у вас не запущены лишние контейнеры.