Как запустить графические приложения в Docker

Запуск графических приложений Docker

Docker обычно используется для серверных и командных приложений. Однако, с правильной настройкой, вы также можете запускать графические приложения внутри контейнеров. Эти контейнеры могут включать графические библиотеки и инструменты отображения, которые позволяют приложениям работать в безопасной и изолированной среде. Этот подход упрощает разработку, тестирование и развертывание графических приложений на различных машинах или операционных системах. Этот гид проведет вас через процесс запуска графических приложений внутри контейнеров Docker с минимальной настройкой.

Понимание Docker и графических контейнеров Docker

Docker позволяет вам упаковать приложение вместе со всем, что ему нужно, таким как код, библиотеки и настройки, в самодостаточный блок, называемый контейнером. Эти контейнеры используют ядро хост-системы, что делает их легкими, быстрыми для запуска и эффективными по сравнению с полными виртуальными машинами.

Графические контейнеры — это настройки Docker, которые включают графические приложения, такие как Firefox, Gedit или другие настольные инструменты, позволяя их окнам появляться на вашем экране. В отличие от стандартных контейнеров, эти требуют дополнительной конфигурации для подключения к системе отображения хоста, что позволяет правильно отображать и взаимодействовать с графическими элементами.

Почему стоит запускать графические приложения в Docker?

Вот ключевые причины, почему запуск графических приложений в Docker может быть полезным:

  • Когда вы запускаете графическое приложение в Docker, все, что ему нужно, такие как библиотеки и настройки, упаковано внутри контейнера. Это позволяет вашему основному системе оставаться свободной от беспорядка или конфликтов.
  • Использование Docker означает, что ваше приложение будет работать одинаково на любой машине. Независимо от того, разрабатываете ли вы, тестируете или делитесь с другими, среда остается постоянной.
  • Контейнеры упрощают тестирование нового приложения или отладку чего-либо. Вы можете запускать, приостанавливать или удалять их, не затрагивая вашу хост-машину.
  • Docker позволяет запускать графические приложения Linux на системах, не являющихся Linux. Это достигается с помощью инструментов совместного использования дисплея, таких как XQuartz или VcXsrv, поэтому нет необходимости в виртуальной машине.
  • В отличие от традиционных виртуальных машин, контейнеры Docker используют меньше системных ресурсов. Они запускаются быстрее и работают более плавно, даже для графических приложений.

Запуск графических приложений в Docker

Чтобы запустить графические приложения в Docker, вам сначала нужно убедиться, что Docker установлен на вашей системе Linux. Вы можете проверить это, выполнив следующую команду:

docker --version

Если эта команда возвращает номер версии, это означает, что Docker установлен и работает. Если нет, вы, вероятно, увидите ошибку “команда не найдена”.

После того, как Docker правильно настроен, вы можете перейти к следующим шагам.

Активировать службу Docker

Теперь запустите службу Docker, используя следующую команду:

sudo systemctl start docker

Чтобы проверить, работает ли служба Docker правильно, выполните:

sudo systemctl status docker

Вывод подтверждает, что служба Docker активна и работает без каких-либо проблем:

Проверка статуса Docker

Настройка папки проекта и Dockerfile

Давайте создадим директорию с именем “dockerGUI”, где мы будем хранить все файлы, связанные с Docker, для запуска графических приложений:

mkdir dockerGUI

Теперь перейдите в эту директорию, чтобы убедиться, что все последующие файлы, которые мы создадим или изменим, будут храниться в папке dockerGUI:

cd dockerGUI

Создайте новый файл с именем dockerGUIFile, чтобы определить конфигурацию образа Docker:

nano dockerGUIFile

Теперь вставьте следующие строки кода в dockerGUIFile:

FROM jess/firefox  
ENV DISPLAY=:0  
CMD ["firefox"]

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

Примечание: Чтобы попробовать другое приложение, просто измените образ и команду в вашем Dockerfile. Например, чтобы запустить Gedit, вы можете использовать официальный образ Ubuntu и установить приложение во время сборки следующим образом:

FROM ubuntu  
RUN apt-get update && apt-get install -y gedit  
ENV DISPLAY=:0  
CMD ["gedit"]

Сборка образа Docker

Теперь, когда конфигурация Docker настроена в dockerGUIFile, давайте соберем образ Docker, используя следующую команду:

sudo docker build -t myfirefox:1 -f dockerGUIFile .

Эта команда собирает образ Docker из dockerGUIFile, называет его myfirefox с тегом 1 и использует текущую директорию в качестве контекста:

Сборка образа Docker

Запуск контейнера Docker с включенной поддержкой GUI

Теперь включите поддержку GUI для контейнеров Docker, выполнив следующую команду:

xhost +local:docker

Вывод подтверждает, что локальным клиентам (таким как контейнеры Docker), работающим на моей системе, теперь разрешено подключаться к моему X-серверу:

Теперь запустите контейнер, используя следующую команду, чтобы запустить Firefox с поддержкой GUI на вашей хост-системе:

docker run -it --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix myfirefox:1

В результате эта команда подключает контейнер к вашему дисплею, что позволяет Firefox открываться на вашем экране так же, как и нативное приложение:

Запуск графического приложения из Docker

Примечание: Использование опции --rm заставляет Docker автоматически удалять контейнер после закрытия приложения, поддерживая вашу систему в чистоте и предотвращая его появление в docker ps -s.

Отключение Docker от X-сервера

После того, как вы закончили использовать графическое приложение, рекомендуется закрыть доступ к X-серверу по соображениям безопасности:

xhost -local:docker

Заключительные мысли

Запуск графических приложений в Docker — отличный способ расширить возможности контейнеров за пределами командной строки. С правильной настройкой вы можете запускать настольные приложения из контейнера так, как если бы они были установлены на вашей системе. Это простой, но мощный подход для тестирования, разработки или изучения инструментов Linux в чистой среде. Начните создавать свои собственные контейнеры, готовые к GUI, и полностью используйте возможности, которые предлагает Docker на вашем рабочем столе Linux.