Всех приветствую. Переустанавливая Убунту, подумал, почему бы не попробовать Docker Desktop в этот раз, ведь он уже должен быть в приемлимом для использования состоянии. Для чего он может пригодиться, спросите вы? Как-то я насоздавал кучу volumes и разных images примерно одного и того же, и чистить это было не в удовольствие, хоть и есть специальные команды для этого, но зачем до такого доводить, не лучше было бы иметь какой-то UI, чтобы следить за всем и по необходимости сразу удалять?

Казалось бы, раз на Linux с docker нет никаких проблем, то и с Docker Desktop (далее DD) не должно быть, но не тут то было. Будем подразумевать, что у вас уже установлен docker, если нет, то вот ссылка на гайд со всеми нужными вам командами и способами. Ну что же, приступим.

UPD: В комментариях поправили, что docker для работы Docker Desktop не нужен, но т.к. (спойлер) я рекомендую в конце его снести и просто подключить другую UI к обычному докеру, и т.к. даже в оф. документации DD подразумевается его наличие и упомянуто как отключить обычный docker, то я оставлю это как есть.

Функционал Docker Desktop
Функционал Docker Desktop

1. Требования

У Docker Desktop есть куча требований для того, чтобы он нормально работал на Ubuntu. С них и начнем, по порядку.

  1. ЦП должен быть 64 битным и иметь поддержку виртуализации. Как ее включить в вашем UEFI найдете в интернете.

  2. Должна быть поддержка KVM виртуализации. На практике она должна быть, если вы в UEFI включили виртуализацию. Проверяется modprobe kvmkvm-ok или lsmod | grep kvm. Также нужно добавить себя в группу kvm udo usermod -aG kvm $USER.

  3. Куча неважных на практике требований. Такие, как QEMU версии 5.2 или выше, systemd init system, GNOME/KDE/Mate ГУИ Линукса, как минимум 4 гб оперативки. На деле же это все и так выполняется, если у вас Ubuntu 22.04, которую DD и требует (также он допускает 21.10, но думаю там с этим тоже все в порядке).

  4. Должен быть включен File sharing. Еще одна неведомая вещь (маппинг айдишников), которая на практике у меня уже была в порядке на 22.04 версии. Подробнее можете прочитать здесь. Советую просто проверить, что вывод этих команд у вас такой, если так и есть, то можете двигаться дальше.

    $echo $USER- exampleuser$cat /etc/subuid- exampleuser:100000:65536$cat /etc/subgid- exampleuser:100000:65536

  5. Рекомендуется инициализировать менеджер паролей pass. Честно, никогда им не пользовался, но для гайда открыл. Пишите команду gpg --generate-key, вводите свои данные, копируете id из ответа команды

    то что вместо <generated_gpg-id_public_key>
    то что вместо <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
Функционал Portainer

Ну что же, надеюсь эта статья также будет кому‑то полезна, ведь теперь по прежнему можно вызывать все команды из терминала, периодически заходя в portainer и поглядывая, что вы не наплодили слишком много images и volumes, и что у вас не запущены лишние контейнеры.

Комментарии (30)


  1. gerod
    13.09.2023 21:03

     Во-первых, с установкой DD он поставит docker compose v2, который отличается от привычного тем, что больше нет тире в команде docker-compose. Если сейчас вы запустите какой-нибудь компоуз или докер файлик, то вы не увидите ничего в приложении. Почему? Потому что у DD и обычного докера разные контексты. Как начать работать с контекстом DD? Напишите команду docker context use desktop-linux и после этого можете вводить привычные вам команды в терминал и все действия будут отображаться в DD.

    В VS code плагин для докера нормально выполняет сборку docker-compose файлов как с DD так и с обычным докером.

    docker-compose выполняется из терминала (Ubuntu 23.04)


    1. arzybek Автор
      13.09.2023 21:03

      Вы не совсем поняли, что имелось ввиду. Здесь я просто сказал о том, что поставится 2 версия, что первая перестанет работать - я не имел ввиду. Здесь имелось ввиду, что если вы напишите, что с первой (с тире), что со второй (без тире), результат команды будет выполнен в контексте дефолтном и в DD не будет видно ничего.


      1. gerod
        13.09.2023 21:03

        я только что зашел и проверил командой выше и все отобразилось в DD. Возможно я опять не так понял?


        1. arzybek Автор
          13.09.2023 21:03

          Вы на какой платформе сидите? Если у вас Windows и WSL и docker-desktop, то конечно у вас там все настроено и уже стоит контекст docker desktop. Если вы все повторяете на Ubuntu, то нет, после установки DD и запуска в терминале docker compose up -d у вас в DD ничего не появится, я это лично проверял и есть даже вопрос с ответом по этому поводу на SO. Нужно сменить контекст на docker desktop и затем запустить. Возможно, где-то у вас автоматически сменилось, но сомневаюсь, у меня не сменялось.


          1. gerod
            13.09.2023 21:03

            Я выше же написал Ubuntu 23.04. Смысл мне врать если я сразу пошел проверить после прочтения статьи?


            1. arzybek Автор
              13.09.2023 21:03

              Ну я проверял на 22.04, у меня не сменилось, запускалось в дефолтном контексте, после смены на контекст DD стало видно и в приложении. Мне врать тоже смысла нет, это также есть и в документации докера, необходимость сменить перед запуском, можете сами проверить.


            1. arzybek Автор
              13.09.2023 21:03
              +1

              UPD: Кажется я нашел причину, возможно, я запустил еще до полного запуска DD, написано что он сам меняет контекст на нужный, хотя точно помню, что раньше читал про необходимость самому сменить. Но в любом случае знать об этом не помешает, как и вручную сменить перед запуском, вдруг не запустилось как у меня до конца приложение, а вы уже набрали команду в терминал. Дополнил в статье


  1. omaxx
    13.09.2023 21:03
    +2

    Должна быть поддержка KVM виртуализации.

    Одна эта фраза уже должна была насторожить, что что-то тут не то... Зачем нормальному докеру kvm?

    Будем подразумевать, что у вас уже установлен docker

    А вот это совсем не требуется. Потому что KVM..


    1. arzybek Автор
      13.09.2023 21:03
      -1

      Почему не требуется? А как писать команды с терминала? И KVM нужен не нормальному докеру, а Docker Desktop приложению


      1. omaxx
        13.09.2023 21:03

        Ручками... пишите docker и т.д.

        Вы бы прочитали инструкцию по установке сначала, прежде чем статью на хабре писать: https://docs.docker.com/desktop/install/debian/


        1. arzybek Автор
          13.09.2023 21:03
          -2

          Вы говорите docker не нужен, а затем говорите ручками писать команды docker... Я вас не понимаю. Вы говорите, что для работы Docker Desktop не нужен установленный docker потому, что KVM. Я пока не особо понимаю смысл этого. А гайд по установке я читал, я его и линканул, и по нему и устанавливал. И там есть отдельный для Убунту, по нему и делал статью.


          1. 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 тут ни при чем.


            1. arzybek Автор
              13.09.2023 21:03

              Понятно, то есть вы имели ввиду, что если устанавливать только Docker Desktop, то отдельно Docker ставить не обязательно, но дочитайте статью до конца, я вообще исходил из того, что человек уже пользуется установленным докером и хочет подключить к нему UI, советовать кому-то ставить только Docker Desktop, учитывая что в конце я рекомендую его снести, как-то нелогично. И да, в самой оф. документации также упоминается, что работать будут 2 engine одновременно, т.е. все-таки наличие докера подразумевается и в оф. документации, и сказано как можно второй отключить, я не стал это включать, т.к. в конце рекомендую все равно снести DD.

              Про docker compose я говорил вообще не в этом контексте, это просто упоминание того, что установится второй, и про то, что если его вызывать из консоли, то он сработает на дефолтном контексте (по крайней мере у меня так было)


              1. omaxx
                13.09.2023 21:03

                я вообще исходил из того, что человек уже пользуется установленным докером и хочет подключить к нему UI

                Нет... это невозможно... UI не подключается к уже установленному докеру, а получается полностью независимая установка.


                1. arzybek Автор
                  13.09.2023 21:03

                  Ну, изначальный мотив именно такой. Далее пробуется Docker Desktop, приходим к выводу что что-то слишком сложно, подключаем к дефолтному докеру UI, такой посыл, если прочитать всю статью от начала до конца. В любом случае, дополнил в статье.


                  1. 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 под линукс? Там есть отдельная статья про это.


                    1. arzybek Автор
                      13.09.2023 21:03
                      -3

                      Ну вы дотошно докапываетесь к определениям. Я исхожу с точки зрения обычного юзера, которому понадобилось покликать докер в UI и он логично пошел сначала попробовать официальное решение. То, что запускаться все будет в другом контексте - я знаю, это также в статье написано, но опять же, для конечного юзера это выглядит также, как запуск команд "docker ...", и просмотр результата в UI.


                      1. omaxx
                        13.09.2023 21:03

                        Это каким это "обычным юзерам" может потребоваться докер? И для чего? "Покликать в UI"?


                      1. arzybek Автор
                        13.09.2023 21:03

                        Ну вот мне пригодилось, я обычный юзер (относительно профессиональных devopсов и сис. админов), для чего пригодилось покликать также в статье написано, читайте внимательнее, пожалуйста


            1. slonopotamus
              13.09.2023 21:03

              docker engine, который работает только на linux

              Нет. На винде он тоже работает.


  1. Tempelfeld
    13.09.2023 21:03

    Я не совсем понял необходимость в DD. Хотя, написано, чтобы все контейнеры работали в виртуалке. На винде, может быть, актуально. Возможно, и на маке. Хотя, пишут есть возможность нарваться на вредоносный контейнер. Ну тут как с браузером. Можно жить без вирусов и без антивирусов. А можно с антивирусом нахватать гадости. Главное, ставить официальные/проверенные образы. Единственное, остаётся вопрос подмены/заражения образа.


    1. arzybek Автор
      13.09.2023 21:03

      Ну да, по итогу пришел к выводу, что не нужен)


    1. atshaman
      13.09.2023 21:03

      Это из разряда "вылить воду из чайника, после чего задача сведется к предыдущему варианту". На windows иначе хрен извернешься - вот и перенесли с минимальными изменениями.


  1. AlexGluck
    13.09.2023 21:03
    +2

    Хорошей альтернативой был бы подман и https://podman-desktop.io/
    Установка через флатпак не требует рут прав, как и запуск сервиса подман.


  1. atshaman
    13.09.2023 21:03
    +1

    А podman-desktop не пробовали? Под *nix должно быть существенно более вменяемым с т.з. реализации вариантом.


  1. Komandir_Bublik
    13.09.2023 21:03

    проще поставить portainer или yacht


    1. arzybek Автор
      13.09.2023 21:03

      В конце это и указано


  1. websofter
    13.09.2023 21:03

    Все проблемы в статье на ubuntu решаются docker system prune и vs code plugin, а Docker Desktop не нужен


  1. ALexhha
    13.09.2023 21:03

    Как-то я насоздавал кучу volumes и разных images примерно одного и того же, и чистить это было не в удовольствие, хоть и есть специальные команды для этого, но зачем до такого доводить, не лучше было бы иметь какой-то UI, чтобы следить за всем и по необходимости сразу удалять?

    Серъезно ? Т.е. docker system prune уже считается специальной командой и настолько неудобной, что стоит ставить docker desktop ?! Это все равно, что поставить intellij idea для набора заметок в txt

    Человечество свернуло куда то не туда )))


    1. arzybek Автор
      13.09.2023 21:03

      Честно говоря делал все вручную в images и volumes, не знал про общую команду