- linux-notes.org
- Запуск GUI-приложения в Docker
- Запуск GUI-приложения в Docker
- Архитектура X window system 101
- Контейнерезированные (Containerizing) GUI приложения
- Добавить комментарий Отменить ответ
- Managing Windows Containers with Graphical User Interfaces
- Creating a Docker Container
- Kitematic
- Portainer
- Краткий сравнительный обзор 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 для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Managing Windows Containers with Graphical User Interfaces
In this article, I will describe how to manage Windows Containers via GUI. Docker provides a great Docker CLI that allows us to create, interact, and delete containers, but sometimes it’s nice to have an interface to manage Containers. There are many admins who much prefer a GUI tool to handle every task and it can be useful to use an interface when you have many containers to manage or if you start working with Docker. In this article, I don’t want to judge which GUI is better because it depends! You must use the GUI that will suit your needs. So do not hesitate to test this GUI. In this article, I will walk through the following tools:
For sure, there are other interfaces so this list is not exhaustive.
Creating a Docker Container
In this guide, I will create a simple Docker Container to demonstrate how to use these interfaces. Let’s start by pulling the “nanoserver/iis-php” Docker image which contains: Windows Nano Server, IIS and PHP 7. Once Docker has been installed on your system, open an elevated PowerShell console:
Now if I want to create my first Windows Container, I just have to run the following command:
This command will expose my Windows Container’s port 80 on my Container Host port 8001. Let’s confirm that a Windows Container is running in the background:
Kitematic
Kitematic has been acquired by Docker in October 2015, so Kitematic is part of the Docker Toolbox. It means that if you work with ‘Docker for Windows’, then you can download Kitematic directly by right-clicking on your Docker icon, and select Kitematic:
Once Kitematic has been downloaded, extract the ZIP file and then you can run ‘Kitematic.exe’:
At the first screen, you will be able to connect to your Docker Hub account, but it is not mandatory. On the left side of Kitematic, you can interact with your Docker Containers that exist on your system. In my case, I can see my ‘nanoiis’ container which is running on my system. On the right side of Kitematic, I can create a new container by clicking ‘Create’:
Here, I just want to manage my Docker Container, so I select ‘nanoiis’. With Kitematic, I will be able to:
- Check the Container logs
- Preview the home page of my container
- Configure my container (Network, volumes, …)
- Open the Docker CLI from this interface
Now, navigate to the settings to dig into the possible configuration options and you will notice that you can:
- Start, stop and restart the container
- Modify the hostname and the port number
- Create a Container Volume
- Configure the network
- …
Finally, I also can manage a Linux Container on my Windows 10 and easily browse to my nginx website. I also can connect directly to my Container using the Docker CLI.
VSAN from StarWind eliminates any need for physical shared storage just by mirroring internal flash and storage resources between hypervisor servers. Furthermore, the solution can be run on the off-the-shelf hardware. Such design allows VSAN from StarWind to not only achieve high performance and efficient hardware utilization but also reduce operational and capital expenses. | |
Learn more about ➡ VSAN from StarWind . |
Portainer
Portainer is an Open-Source lightweight management UI that allows you to easily manage your Docker Hosts or Swarm Clusters. Portainer is available on Linux, Windows, and OSX. Portainer is a free web application that runs as a container itself. To install Portainer, run the following commands:
Краткий сравнительный обзор 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 официально мертв.