Запускаем GUI в Docker: Полное руководство для Linux
Вы уверены, что Docker — это только для серверов и консольных приложений? Готовы поспорить, вы ошибаетесь. Представьте, что вы можете запустить графический редактор Gimp или браузер Google Chrome прямо внутри контейнера, и они будут работать как родные. Это не магия, а реальность, которую можно легко настроить.
Зачем это нужно? Для отладки сложных приложений, изоляции софта или просто для экспериментов. Docker создан для командной строки, но его границы легко раздвинуть.
Мы покажем вам, как заставить контейнер "видеть" ваш рабочий стол. Секрет кроется в правильной настройке X-сервера и специального файла аутентификации. Вы узнаете, как безопасно открыть доступ к графической подсистеме хоста.
В статье — готовые команды для запуска Gimp и даже Chrome с поддержкой аппаратного ускорения и звука. Мы разберем каждый флаг и параметр, чтобы вы понимали, что делаете.
Хотите изолировать потенциально опасный софт или просто блеснуть знаниями? Этот навык выделит вас среди других разработчиков. Переходите к полному руководству и откройте для себя Docker с новой, графической стороны!
Система управления контейнерами docker нацелена на то, чтобы процессы в ней работали без графического интерфейса. Однако иногда надо использовать её не совсем по назначению, например, запускать приложения, которые в обычном режиме будут работать в режиме без интерфейса, но для отладки надо посмотреть что они делают и что выводят.
В этой небольшой статье мы разберемся как запустить графическое приложение в Docker в операционных системах семейства Linux. Мы будем подключать наш основной X сервер к контейнеру.
Графические приложения в Docker
Первым делом надо сделать небольшое изменение для хоста, иначе, хост не разрешит приложению контейнера подключаться к X серверу. Создаем файл /tmp/docker.xauth:
touch /tmp/docker.xauth
А затем помещаем в него данные для аутентификации:
xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f touch /tmp/docker.xauth nmerge -
Эти строки можно добавить в ~/.xinitrc, чтобы файл аутентификации создавался автоматически при запуске X сервера:
vi ~/.bashrc
XAUTH=/tmp/docker.xauth
touch $XAUTH
xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
Теперь всё готово к запуску контейнера docker с gui. В контейнер мы примонтируем этот файл, UNIX сокет X сервера и передадим переменные, которые помогут приложениям в контейнере это всё найти. Для примера запустим gimp:
docker run --rm -ti -v /tmp/.X11-unix:/tmp/.X11-unix -v /tmp/docker.xauth:/tmp/docker.xauth -e DISPLAY=unix$DISPLAY -e XAUTHORITY=/tmp/docker.xauth jamesnetherton/gimp
Если вы хотите запустить более сложную программу, например браузер Google Chrome, то вам понадобиться подключить ещё и поддержку аппаратного ускорения видео, а также звук:
docker run --rm -ti -v /tmp/.X11-unix:/tmp/.X11-unix -v /tmp/docker.xauth:/tmp/docker.xauth -e DISPLAY=unix$DISPLAY -e XAUTHORITY=/tmp/docker.xauth --device /dev/dri:/dev/dri --device /dev/sni:/dev/sni dmitryrck/google-chrome
Выводы
В этой статье мы кратко разобрали как можно запускать графические приложения Docker. GUI - это довольно нестандартная задача, но и её можно решить.