Всех приветствую. Переустанавливая Убунту, подумал, почему бы не попробовать 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 из ответа командыПосле чего пишите команду
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, и что у вас не запущены лишние контейнеры.
Комментарии (30)
omaxx
13.09.2023 21:03+2Должна быть поддержка KVM виртуализации.
Одна эта фраза уже должна была насторожить, что что-то тут не то... Зачем нормальному докеру kvm?
Будем подразумевать, что у вас уже установлен docker
А вот это совсем не требуется. Потому что KVM..
arzybek Автор
13.09.2023 21:03-1Почему не требуется? А как писать команды с терминала? И KVM нужен не нормальному докеру, а Docker Desktop приложению
omaxx
13.09.2023 21:03Ручками... пишите docker и т.д.
Вы бы прочитали инструкцию по установке сначала, прежде чем статью на хабре писать: https://docs.docker.com/desktop/install/debian/
arzybek Автор
13.09.2023 21:03-2Вы говорите docker не нужен, а затем говорите ручками писать команды docker... Я вас не понимаю. Вы говорите, что для работы Docker Desktop не нужен установленный docker потому, что KVM. Я пока не особо понимаю смысл этого. А гайд по установке я читал, я его и линканул, и по нему и устанавливал. И там есть отдельный для Убунту, по нему и делал статью.
omaxx
13.09.2023 21:03+1Есть два продукта: docker engine, который работает только на linux, и docker desktop, который включает в себя linux VM, внутри которой работает тот же самый docker engine, и поэтому docker desktop может работать и под macos, и под windows, но требует виртуализации.
Консольная утилита docker (это именно то, что вы запускаете в терминале) входит в оба этих продукта.
А вашем случае получается, что у вас на компе работают одновременно два engine, один нативно, другой из-под kvm... Отличный способ запутаться. И разница в docker-compose v1 или v2 тут ни при чем.
arzybek Автор
13.09.2023 21:03Понятно, то есть вы имели ввиду, что если устанавливать только Docker Desktop, то отдельно Docker ставить не обязательно, но дочитайте статью до конца, я вообще исходил из того, что человек уже пользуется установленным докером и хочет подключить к нему UI, советовать кому-то ставить только Docker Desktop, учитывая что в конце я рекомендую его снести, как-то нелогично. И да, в самой оф. документации также упоминается, что работать будут 2 engine одновременно, т.е. все-таки наличие докера подразумевается и в оф. документации, и сказано как можно второй отключить, я не стал это включать, т.к. в конце рекомендую все равно снести DD.
Про docker compose я говорил вообще не в этом контексте, это просто упоминание того, что установится второй, и про то, что если его вызывать из консоли, то он сработает на дефолтном контексте (по крайней мере у меня так было)
omaxx
13.09.2023 21:03я вообще исходил из того, что человек уже пользуется установленным докером и хочет подключить к нему UI
Нет... это невозможно... UI не подключается к уже установленному докеру, а получается полностью независимая установка.
arzybek Автор
13.09.2023 21:03Ну, изначальный мотив именно такой. Далее пробуется Docker Desktop, приходим к выводу что что-то слишком сложно, подключаем к дефолтному докеру UI, такой посыл, если прочитать всю статью от начала до конца. В любом случае, дополнил в статье.
omaxx
13.09.2023 21:03+5Еще раз:
Вы сформулировали задачу в самом начале статьи
Как-то я насоздавал кучу volumes и разных images примерно одного и того же, и чистить это было не в удовольствие, хоть и есть специальные команды для этого, но зачем до такого доводить, не лучше было бы иметь какой-то UI, чтобы следить за всем и по необходимости сразу удалять?
В самом начале инструкции по установке docker desktop жирным шрифтом написано:
Docker Desktop on Linux runs a Virtual Machine (VM) so creates and uses a custom docker context
desktop-linux
on startup.This means images and containers deployed on the Linux Docker Engine (before installation) are not available in Docker Desktop for Linux.
Т.е. docker desktop вообще не умеет работать с нативным линуксовским докером. На этом все. Ваша задача этим инструментом не решается. Зачем вообще кому-то может понадобиться docker desktop под линукс? Там есть отдельная статья про это.
arzybek Автор
13.09.2023 21:03-3Ну вы дотошно докапываетесь к определениям. Я исхожу с точки зрения обычного юзера, которому понадобилось покликать докер в UI и он логично пошел сначала попробовать официальное решение. То, что запускаться все будет в другом контексте - я знаю, это также в статье написано, но опять же, для конечного юзера это выглядит также, как запуск команд "docker ...", и просмотр результата в UI.
omaxx
13.09.2023 21:03Это каким это "обычным юзерам" может потребоваться докер? И для чего? "Покликать в UI"?
arzybek Автор
13.09.2023 21:03Ну вот мне пригодилось, я обычный юзер (относительно профессиональных devopсов и сис. админов), для чего пригодилось покликать также в статье написано, читайте внимательнее, пожалуйста
slonopotamus
13.09.2023 21:03docker engine, который работает только на linux
Нет. На винде он тоже работает.
Tempelfeld
13.09.2023 21:03Я не совсем понял необходимость в DD. Хотя, написано, чтобы все контейнеры работали в виртуалке. На винде, может быть, актуально. Возможно, и на маке. Хотя, пишут есть возможность нарваться на вредоносный контейнер. Ну тут как с браузером. Можно жить без вирусов и без антивирусов. А можно с антивирусом нахватать гадости. Главное, ставить официальные/проверенные образы. Единственное, остаётся вопрос подмены/заражения образа.
atshaman
13.09.2023 21:03Это из разряда "вылить воду из чайника, после чего задача сведется к предыдущему варианту". На windows иначе хрен извернешься - вот и перенесли с минимальными изменениями.
AlexGluck
13.09.2023 21:03+2Хорошей альтернативой был бы подман и https://podman-desktop.io/
Установка через флатпак не требует рут прав, как и запуск сервиса подман.
atshaman
13.09.2023 21:03+1А podman-desktop не пробовали? Под *nix должно быть существенно более вменяемым с т.з. реализации вариантом.
websofter
13.09.2023 21:03Все проблемы в статье на ubuntu решаются docker system prune и vs code plugin, а Docker Desktop не нужен
ALexhha
13.09.2023 21:03Как-то я насоздавал кучу volumes и разных images примерно одного и того же, и чистить это было не в удовольствие, хоть и есть специальные команды для этого, но зачем до такого доводить, не лучше было бы иметь какой-то UI, чтобы следить за всем и по необходимости сразу удалять?
Серъезно ? Т.е. docker system prune уже считается специальной командой и настолько неудобной, что стоит ставить docker desktop ?! Это все равно, что поставить intellij idea для набора заметок в txt
Человечество свернуло куда то не туда )))
arzybek Автор
13.09.2023 21:03Честно говоря делал все вручную в images и volumes, не знал про общую команду
gerod
В VS code плагин для докера нормально выполняет сборку docker-compose файлов как с DD так и с обычным докером.
docker-compose выполняется из терминала (Ubuntu 23.04)
arzybek Автор
Вы не совсем поняли, что имелось ввиду. Здесь я просто сказал о том, что поставится 2 версия, что первая перестанет работать - я не имел ввиду. Здесь имелось ввиду, что если вы напишите, что с первой (с тире), что со второй (без тире), результат команды будет выполнен в контексте дефолтном и в DD не будет видно ничего.
gerod
я только что зашел и проверил командой выше и все отобразилось в DD. Возможно я опять не так понял?
arzybek Автор
Вы на какой платформе сидите? Если у вас Windows и WSL и docker-desktop, то конечно у вас там все настроено и уже стоит контекст docker desktop. Если вы все повторяете на Ubuntu, то нет, после установки DD и запуска в терминале docker compose up -d у вас в DD ничего не появится, я это лично проверял и есть даже вопрос с ответом по этому поводу на SO. Нужно сменить контекст на docker desktop и затем запустить. Возможно, где-то у вас автоматически сменилось, но сомневаюсь, у меня не сменялось.
gerod
Я выше же написал Ubuntu 23.04. Смысл мне врать если я сразу пошел проверить после прочтения статьи?
arzybek Автор
Ну я проверял на 22.04, у меня не сменилось, запускалось в дефолтном контексте, после смены на контекст DD стало видно и в приложении. Мне врать тоже смысла нет, это также есть и в документации докера, необходимость сменить перед запуском, можете сами проверить.
arzybek Автор
UPD: Кажется я нашел причину, возможно, я запустил еще до полного запуска DD, написано что он сам меняет контекст на нужный, хотя точно помню, что раньше читал про необходимость самому сменить. Но в любом случае знать об этом не помешает, как и вручную сменить перед запуском, вдруг не запустилось как у меня до конца приложение, а вы уже набрали команду в терминал. Дополнил в статье