- linux-notes.org
- Запуск GUI-приложения в Docker
- Запуск GUI-приложения в Docker
- Архитектура X window system 101
- Контейнерезированные (Containerizing) GUI приложения
- Добавить комментарий Отменить ответ
- 🐳 Лучшие инструменты с графическим интерфейсом для Docker
- Portainer (веб-приложение)
- DockStation (Настольное приложение)
- Docker Desktop (Настольное приложение)
- Lazydocker (Терминальный интерфейс)
- Docui (Терминальный интерфейс)
- Заключение
- Краткий сравнительный обзор GUI решений для работы с Docker
linux-notes.org
Запуск GUI-приложения в Docker
Хочу поведать историю о том, как я запустил GUI-приложение в Docker. некоторые спросят, зачем? Ну есть много причин, вот некоторые из них:
- Нет нужного пакета/утилиты под твою ОС.
- Проверить что получится.
Запуск GUI-приложения в Docker
Начну с теории и закончу примерами.
Архитектура X window system 101
В *NIX системах, приложение GUI имеет роль «X-клиента». Каждый раз, когда он перерисовывает свое содержимое, последовательность графических команд кодируется все в X протокол используя библиотеку (обычно Xlib) и передается в сокет X11. На другом конце, X-сервер считывает такие команды из сокета и отображает их на дисплей:
Контейнерезированные (Containerizing) GUI приложения
Взглянув на архитектуру X window системы, ясно то, что для того, чтобы наши контейнеризованные графические приложения могли рисовать на экране, нам нужно предоставить ему доступ к сокету X11 (запись), и нам нужен X-сервер для использования и рендеринга графики команд на экран.
Мы можем подойти к этой проблеме с двух сторон:
- Мы можем связать xvfb и VNC-сервер с нашим образом контейнера.
- Мы можем совместно использовать сокет X11 хоста с контейнером в качестве внешнего раздела.
Первый подход — это тот, который проще реализовать, он работает из коробки и клиенты VNC доступны. В то же время мы должны учитывать, что xvfb создает представление в памяти дисплея, а VNC сохраняет в памяти последнюю обновленную область, поэтому в худшем случае мы получаем размер буфера кадра, выделенного дважды в каждый экземпляр докер-контейнера.
Совместное использование сокета X11 хоста с контейнером — это гораздо более модульное решение, которое позволяет использовать более компактный файл Docker, и он позволяет владельцу X-сервера переключать реализацию в соответствии с ее потребностями (возможно, X-сервер нашего хоста может быть даже самой xvfb).
Для начала, установим вспомогательное ПО:
И так, сейчас я приведу несколько примеров использования docker чтобы запустить графическое ПО внутри докер-контейнера. Самый простой способ сделать это, это выполнить:
Это самые простые способы для запуска.
Поддержка 3D hardware acceleration:
Поддержка звука (Audio):
Поддержка Webcam:
Используем date/time как и на хосте:
PS: Некоторые дистрибутивы не используют /etc/localtime, чтобы установить часовой пояс, в этих случаях вам нужно будет проверить, как он это делает и «реплицировать» в контейнер.
Проброс конфигов в контейнер:
Подключаем Video-game controller:
Это были примеры запусков. Сейчас приведу наглядные примеры….
-=== Запуск mysql-workbench в Docker ===-
После чего, я создам машину для тестов, буду использовать docker-machine:
Машина создана, подключаемся к ней:
Внутри созданной докер-машины, создаем:
Где нужно изменить «ENV DISPLAY :0» строку на свой «DISPLAY», чтобы узнать его, выполните:
Получите вывод (Если у вас MacOS X):
Получите вывод (Если у вас Linux. Проверял на CentOS 6):
Ну что, создаем контейнер:
Запускаем контейнер и прокидываем в него сокет. Контейнер автоматически стартует MySQL-Workbench при запуске:
PS: Можно прописать переменную:
Потом запуск будет проходить вот так:
Честно сказать, у меня не получилось запустить данный контейнер на моем macbook, получил ошибку:
Дубль 2, пробую выполнить все тоже, но на CentOS 6:
ИЛИ, для всех юзеров:
Но это не верное решение, берем свой eth0 ИП:
Так же, пробросим переменную для дисплея:
После этого, запускаю:
Вылезли другие ошибки… Посидел пару часов, я исправил ошибки на маке (описание решения, в самом низу статьи), ну а сейчас — я запускаю контейнер:
Или (Но 1-й вариант лучше как по мне):
Шикарно! Все заработало!
-=== Запуск FireFox в Docker ===-
Существует несколько различных вариантов запуска GUI-приложений внутри Docker контейнера:
- С использованием SSH с пересылкой X11
- С использованием SSH с пересылкой VNC
- Разделение сокетов между хостом и докер-контейнером
Самый простой способ — заключается в том, чтобы разделить мой сокет X11 с контейнером и использовать его напрямую. Идея довольно проста, и вы можете легко попробовать попробовать запустить контейнер Firefox, используя следующий файл Docker:
И вот что получилось:
Данный пример приводился на CentOS 6, но у меня есть еще MacOS X и я бы хотел все же подружить все это дело!
Ставим пакет для MacOS X:
Открываем натройки, переходим во вкладку «security» и выставляем все галочки (2 шт):
Хочу добавить следующее, я много перерыл в интернете, но мало что полезного нашел. И да, вот как у меня выглядят конфигы ssh.
Приведу еще пример.
-=== Запуск spotify в Docker ===-
PS: У меня тут используется несколько интерфейсов, но я взял ИП с eth1.
Или, для MacOS X:
Не буду собирать контейнер с Dockerfile, возьму готовый имедж:
Я тут пробросил звуковое устройство во внутрь самого контейнера.
Вот это шайтаны додумались)))
На маке я пока не понял как это сделать 🙁
-=== Запуск wireshark в Docker ===-
PS: У меня тут используется несколько интерфейсов, но я взял ИП с eth1.
Или, для MacOS X:
Или посмотреть все ИП на всех интерфейсах:
Не буду собирать контейнер с Dockerfile, возьму готовый имедж:
Вот и все, статья «Запуск GUI-приложения в Docker» завершена.
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
🐳 Лучшие инструменты с графическим интерфейсом для Docker
Portainer (веб-приложение)
Открытый исходный код (лицензия Zlib).
ОС: Linux, Mac OS X, Windows.
Portainer полностью поддерживает следующие версии Docker:
- Начиная сDocker 1.10 до последней версии
- Автономный Docker Swarm> = 1.2.3 (ПРИМЕЧАНИЕ. Использование Автономного Docker Swarm не рекомендуется с момента появления встроенного режима Swarm в Docker. В то время как более старые версии Portainer имели поддержку автономного Docker Swarm, Portainer 1.17.0 и более новые do не поддерживает его. Однако встроенный Swarm Mode в Docker полностью поддерживается.)
Полнофункциональная платформа позволяет работать с разными конечными точками.
Вы можете управлять реестрами, сетями, томами, секретами, кофигами, образами и контейнерами.
Portainer может проверить, здоров ли контейнер.
Помимо основных операций, необходимых для работы с контейнерами, такими как запуск, остановка, возобновление, уничтожение, удаление и т. д., вы также можете проверять контейнеры, просматривать логи, визуализировать базовую статистику, прикреплять и открывать консоль для определенных контейнеров.
Кроме того, вы также получаете систему доступа на основе ролей и возможность устанавливать расширения.
Вывод: мощный инструмент с графическим интерфейсом, который можно использовать для командного проекта с локальными или удаленными контейнерами, стек Docker или Docker Swarm. Тем не менее, Portainer может оказаться слишком много для ваших общих потребностей.
DockStation (Настольное приложение)
ОС: Linux / Mac / Windows
DockStation – это бесплатное полнофункциональное настольное приложение, которое позволяет вам работать с docker и docker-compose.
Оно может помочь сгенерировать корректный и собственный файл docker-compose.yml, который можно использовать даже вне приложения, используя собственные команды консоли Docker Compose.
Оно также помогает вам управлять вашими контейнерами и сервисами (как удаленными, так и локальными) и отслеживать их (мониторинг логов, поиск логов, группирование, запуск инструментов и получение информации о контейнере).
Для общего, множественного и единичного мониторинга ресурсов контейнера доступны дополнительные инструменты.
С DockStation вы можете легко отслеживать ЦП, память, сетевой ввод-вывод , блокировать использование ввода-вывода и открывать порты.
Вся работа может быть организована в проекты, где вы можете проверить состояние каждого контейнера, построить графическую схему, которая визуализирует каждый образ в проекте и отношения между ними.
В качестве дополнительной опции DockStation работает как DockStation с Docker Hub.
DockStation – это бесплатное полнофункциональное настольное приложение, которое позволяет вам работать с docker и docker-compose.
Он может помочь сгенерировать чистый и собственный файл docker-compose.yml, который можно использовать даже вне приложения, используя собственные команды консоли Docker Compose.
Он также помогает вам управлять вашими контейнерами и сервисами (как удаленными, так и локальными) и отслеживать их (мониторинг журналов, поиск журналов, группирование, запуск инструментов и получение информации о контейнере).
Для общего, множественного и единичного мониторинга ресурсов контейнера доступны дополнительные инструменты.
С DockStation вы можете легко отслеживать ЦП, память, сетевой ввод-вывод, блокировать использование ввода-вывода и открывать порты.
Вся работа может быть организована в проекты, где вы можете проверить состояние каждого контейнера, построить графическую схему, которая визуализирует каждое изображение в проекте и отношения между ними.
В качестве дополнительной выгоды DockStation работает как DockStation с Docker Hub.
Docker Desktop (Настольное приложение)
Поскольку Docker-toolbox (с Kitematic) устарел, всем пользователям рекомендуется использовать Docker Desktop для Mac и Docker Desktop для Windows.
Этот инструмент дает вам возможность установить ограничения ресурсов для вашего Docker (память, процессор, размер подкачки и образа диска, общий доступ к файлам, прокси-серверы и сеть), настроить ядро Docker, командную строку и Kubernetes (вы можете настроить развертывание в Kubernetes из Docker Desktop).
Используя панель мониторинга, вы можете использовать не только основные операции с контейнерами, но также просматривать логи, базовую статистику и проверять свой контейнер.
Все это можно вызвать через контекстное меню или из индикатора в строке состояния.
Lazydocker (Терминальный интерфейс)
Открытый исходный код
ОС: (Linux / OSX / Windows)
- Go версия> = 1.8
- Docker > = 1.13 (API> = 1.25)
- Docker-Compose> = 1.23.2 (необязательно)
Lazydocker можно использовать как с помощью мыши, так и с клавиатуры.
Для некоторых элементов доступно контекстное меню, где вы можете найти все популярные команды с ярлыками.
Хорошей новостью является то, что у вас есть не только основные команды для управления контейнерами, базовая статистика, журналы и проверки;
Вы также можете использовать графическую визуализацию основных метрик (по умолчанию загрузка ЦП и памяти) и «top» процессов.
Кроме того, вы также можете настроить этот раздел для почти всех метрик, которые вы хотите.
Для выбранных изображений вы можете увидеть команды из файла Docker, которые выполняются при их запуске, и унаследованные слои.
Также предусмотрена очистка неиспользуемых контейнеров, образов, томов (нарезка), кроме возможности изменения доступных команд и добавления новых.
В результате у нас есть минималистичный интерфейс терминала, который может быть очень полезен для нескольких «не очень сложных» проектов.
Docui (Терминальный интерфейс)
- Образами (поиск / извлечение / удаление, сохранение / импорт / загрузка, проверка / фильтрация)
- Контейнерами (создание / удаление, запуск / остановка, экспорт / принятие, проверка / переименование / фильтрация, exec cmd)
- Томами (создание / удаление, проверка / фильтрация)
- Сетями (удалить, проверить / отфильтровать)
Заключение
Это не полный список, но в нем затронуты некоторые из самых популярных и удобных бесплатных графических интерфейсов для Docker.
Какой из них выбрать – зависит от ваших потребностей.
Если вам нужен действительно мощный инструмент для команды с управлением доступом, работающей с Docker Swarm, со стеком Docker и может быть развернут на удаленном сервере – выберите Portainer.
Если вам нужен мощный инструмент, который работает в нескольких проектах (возможно, удаленных) с docker-compose и предпочитаете локальное настольное приложение – выберите DockStation.
Если ваш проект не так сложен – вы можете выбрать между Lazydocker (если вы хотите в основном управлять существующими контейнерами и службами с помощью консоли), Docui (если вы в основном создаете простые образы) или Docker Desktop (если вы цените интеграцию с рабочим столом и хотите получить простую интеграцию с Kubernetes).
см. также наш обзор про инструмент для Kubernetes:
Краткий сравнительный обзор GUI решений для работы с Docker
Хотелось сделать пометку, что все эти инструменты затрагивают проблемы по взаимодействию с Docker. Если Вы DevOps и у вас стоит задача развертывания, деплоя, масштабирования и т.п., то вышеописанные решения маловероятно что чем-то смогут вам помочь. Но наверняка вам сможет помочь Rancher.
DockStation — мощный функциональный комбайн для работы с Docker. Главным преимуществом является ориентация на проектную разработку под Docker и работа с Docker Compose.
Преимущества: Работа с Docker Compose. Нативная поддержка Compose конфигураций, в следствие чего получается полноценная поддержка всех возможностей Docker функционала. Очень богатый функционал в виде возможностей работы над Docker проектами в целом, работа с удаленными нодами, мониторинг ресурсов и многое, многое другое. Очень быстрая и дружелюбная поддержка.
Недостатки: Закрытый исходный код.
Portainer — мощное решение для работы и конфигурирования Docker контейнеров. Представляет из себя Web приложение которое позволяет проводить настройку и манипуляции с контейнерами. В отличие от Kitematic и Shipyard имеет очень богатый функционал, который позволяет проводить очень качественную и полноценную настройку.
Преимущества: OpenSource. Богатый функционал, который позволяет как полноценно настроить проект, так и управлять контейнерами этого проекта. Позволяет подключаться к удаленным нодам и просматривать статистику контейнеров.
Недостатки: Непродуманный и перегруженный UI. Работа в веб версии для многих может быть неудобной. Неудобен если работа происходит более чем с 1-м проектом.
Kitematic — официальное приложение от Docker. Kitematic это OpenSource решение которое было выкуплено компанией Docker в 2015-м году. Основное назначение и применение — управление и конфигурирование отдельных контейнеров.
Преимущества: OpenSource. Официальное приложение.
Недостатки: Приложение очень ограниченное в возможностях. Очень слабое покрытие функционала Docker-а. Неудобен если работа происходит более чем с 1-м проектом.
Shipyard — решение для работы с контейнерами Docker. Представляет из себя Web приложение которое позволяет проводить настройку и базовые манипуляции с Docker контейнерами.
Преимущества: OpenSource. Простой в использовании.
Недостатки: Так же как и Kitematic имеет ограниченный функционал. Работа в веб версии для многих может быть неудобной. Неудобен если работа происходит более чем с 1-м проектом.
Таблица функций, которые вы наверняка будете использовать:
DockStation | Kitematic | Portainer | Shipyard | |
---|---|---|---|---|
Работа с Docker Compose | + | — | — | — |
Работа с Docker Machine | + | + | + | + |
Конфигурирование отдельных контейнеров | — | + | + | + |
Базовые манипуляции с контейнерами (старт, стоп, рестарт, . ) | + | + | + | + |
Вывод логов контейнеров | + | + | + | + |
Поиск по логам | + | — | — | — |
Группировка и поиск контейнеров | + | — | — | — |
Мониторинг потребления ресурсов | + | — | + | + |
Работа с удаленными нодами | + | — | + | — |
Шаблоны приложений | — | — | + | — |
Работа с кастомными хабами | — | — | + | — |
Выводы:
Каждый инструмент имеет свои плюсы и минусы. Подходить к выбору инструмента необходимо из поставленной задачи. Если у вас всего один проект в работе и на локальной машине, вам не нужен функционал больше чем запустить, остановить, перезагрузить контейнер, посмотреть его логи или настроить что-то примитивное, то Kitematic будет являться хорошим решением. Если же стоят такие же условия, но нужно это делать на удаленной машине, то для этого вполне подойдет Shipyard.
Если же у вас более серьезные проекты, то остановиться можно на 2-х решениях DockStation и Portainer. По своим функциональным возможностям эти решения очень мощные. Если вы не любите заморачиваться с развертыванием приложений, если на ваших проектах используется Docker Compose или собираетесь переходить на Docker Compose, если вы работаете более чем с 1-м проектом на Docker, если есть необходимость мониторинга состояния и потребления ресурсов как отдельных контейнеров, так и проектов в целом, то однозначно для работы более подходящим решением будет являться DockStation. На случай если работа ведется над одним проектом и вам необходима веб панель и возможность конфигурирования отдельных контейнеров, то Portainer будет являться хорошим выбором.
На момент написания статьи произошло неприятное событие. Проект Shipyard официально мертв.