- Графические приложения в Docker
- Графические приложения в Docker
- Выводы
- Lazydocker — GUI для Docker прямо в терминале
- Возможности
- Инсталляция
- Перспективы
- P.S.
- Обзор GUI-интерфейсов для управления Docker-контейнерами
- Portainer
- Kitematic (Docker Toolbox)
- Shipyard
- Admiral
- DockStation
- Simple Docker UI
- Другие варианты
- P.S.
Графические приложения в Docker
Система управления контейнерами docker нацелена на то, чтобы процессы в ней работали без графического интерфейса. Однако иногда надо использовать её не совсем по назначению, например, запускать приложения, которые в обычном режиме будут работать в режиме без интерфейса, но для отладки надо посмотреть что они делают и что выводят.
В этой небольшой статье мы разберемся как запустить графическое приложение в Docker в операционных системах семейства Linux. Мы будем подключать наш основной X сервер к контейнеру.
Графические приложения в Docker
Первым делом надо сделать небольшое изменение для хоста, иначе, хост не разрешит приложению контейнера подключаться к X серверу. Создаем файл /tmp/docker.xauth:
А затем помещаем в него данные для аутентификации:
xauth nlist $DISPLAY | sed -e ‘s/^. /ffff/’ | xauth -f touch /tmp/docker.xauth nmerge —
Эти строки можно добавить в ~/.xinitrc, чтобы файл аутентификации создавался автоматически при запуске X сервера:
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 — это довольно нестандартная задача, но и её можно решить.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Lazydocker — GUI для Docker прямо в терминале
Два года назад мы уже делали обзор GUI-интерфейсов для работы с Docker, однако мир любителей подобных решений не стоит на месте. На днях до версии 0.2 обновился, а вместе с тем и получил широкую огласку, молодой проект lazydocker, позиционирующий себя как «более ленивый путь управлять всем в Docker». Утилита стремительно набирает популярность — ещё вчера количество его GitHub stars не достигало 3000, а уже сегодня перевалило за 4000.
Возможности
Авторы lazydocker так поясняют появление своего детища:
«Запоминать команды docker тяжело. Запоминать алиасы чуть менее тяжело. Следить за состоянием контейнеров по многочисленным окнам терминала практически невозможно. А что, если вся требуемая информация была бы в одном окне, а каждая типовая команда — доступна по нажатию на одну клавишу (и имелась возможность добавлять свои команды)? Цель lazydocker — превратить эту мечту в реальность».
Итак, lazydocker делает из терминала интерактивный интерфейс для Docker и Docker Compose, позволяющий быстро и удобно переключаться между сервисами, запущенными в разных контейнерах, и связанными с ними ресурсами (образами, томами), просматривать их статус и выполнять различные команды. Поскольку «иногда лучше один раз увидеть», авторы позаботились о весьма самодостаточной gif’ке-иллюстрации:
Навигация по интерфейсу поддерживается как с помощью клавиатуры, так и мыши. При выборе нужного элемента для него доступно контекстное меню:
Пример контекстного меню для выбранного контейнера
Как видно, для каждой команды также предопределена клавиша для быстрого выполнения популярных действий. Полный их список можно увидеть здесь (кстати, у меню есть локализации для нескольких языков, среди которых всё ещё отсутствует русский).
Отдельного уважения заслуживает то внимание, которое уделено просмотру состояния контейнеров: тут не только вывод логов и конфига, но и графически отображаемая статистика (по умолчанию это потребление CPU/памяти), и top процессов. Эти возможности распространяются и на произвольные метрики, для наглядного просмотра которых тоже настраиваются графики (см. секцию stats в конфиге).
Для выбранных образов можно увидеть выполняемые при их запуске команды из Dockerfile , унаследованные слои. Предусмотрена очистка неиспользуемых контейнеров, образов, томов ( prune ).
Доступные команды можно модифицировать, а также дополнять своими. Как это делать, легко увидеть в блоках commandTemplates и customCommands конфига (к слову, конфиг тоже можно редактировать прямо из самой утилиты):
commandTemplates: dockerCompose: docker-compose restartService: '> restart >' stopService: '> stop >' … customCommands: containers: - name: bash attach: true command: docker exec -it > /bin/sh serviceNames: [] …
Инсталляция
Lazydocker написан на Go с использованием библиотеки gocui, предназначенной для создания консольных интерфейсов. Требуется версия Go 1.12. Исходный код распространяется на условиях свободной лицензии BSD 3-Clause (New).
Установка сводится к простой команде:
go get github.com/jesseduffield/lazydocker
В остальном — проще попробовать и увидеть своими глазами.
Перспективы
Разработкой lazydocker до сих пор преимущественно занимался один человек, но его популярность принесла «свежую кровь» в лице более широкого сообщества. Например, сейчас обсуждаются инициированные менее суток назад PR по переработанному Dockerfile и упрощённой установке бинарного релиза утилиты в Linux-дистрибутивах.
В issues проекта можно увидеть такие запросы на улучшения, как настраиваемые keybindings и поддержка команды docker stack . Опять же, они появились менее суток назад.
Всё это говорит о том, что уже в ближайшее время можно ожидать созревания lazydocker до более функционального и удобного решения, на которое у Docker-сообщества оказался явный спрос.
P.S.
Читайте также в нашем блоге:
Обзор GUI-интерфейсов для управления Docker-контейнерами
Работа с Docker в консоли — привычная для многих рутина. Тем не менее, бывают случаи, когда GUI-/веб-интерфейс может оказаться полезным даже для них. В статье представлен обзор наиболее заметных на сегодняшний день решений, авторы которых попытались предложить более удобные (или подходящие для каких-то случаев) интерфейсы для знакомства с Docker или даже обслуживания больших его инсталляций. Некоторые из проектов совсем молоды, а иные — наоборот, уже отмирают…
Portainer
- Сайт; GitHub; Gitter.
- Лицензия: Open Source (zlib License и другие).
- ОС: Linux, Mac OS X, Windows.
- Языки/платформа: Go, JavaScript (Angular).
- Демо-версия (admin / tryportainer).
Portainer (ранее известен как UI for Docker) — самый популярный веб-интерфейс для работы с Docker-хостами и кластерами Docker Swarm. Запускается очень просто — развёртыванием Docker-образа, которому в качестве параметра передаётся адрес/сокет Docker-хоста. Позволяет управлять контейнерами, образами (умеет забирать их из Docker Hub), сетями, томами, секретами. Поддерживает Docker 1.10+ (и Docker Swarm 1.2.3+). При просмотре контейнеров для каждого из них доступна базовая статистика (использование ресурсов, процессы), логи, подключение к консоли (веб-терминал xterm.js). Имеются свои списки доступов, позволяющие ограничивать пользователям Portainer права на различные операции в интерфейсе.
Kitematic (Docker Toolbox)
- Сайт (+ страница Docker Toolbox); GitHub; форум.
- Лицензия: Open Source (Apache License 2.0).
- ОС: Mac OS X, Windows.
- Языки/платформа: Electron, Node.js, React и AltJS.
Стандартный GUI для пользователей Docker в Mac OS X и Windows, который вошёл в состав Docker Toolbox — инсталлятора набора утилит, включающих в себя также Docker Engine, Compose и Machine. Имеет минимальный набор функций, обеспечивающих загрузку образов из Docker Hub, управление базовыми настройками контейнеров (включая тома, сети), просмотр логов и подключение к консоли.
Shipyard
- Сайт; GitHub.
- Лицензия: Open Source (Apache License 2.0).
- ОС: Linux, Mac OS X.
- Языки/платформа: Go, Node.js.
Shipyard — это не просто интерфейс, а система управления ресурсами Docker, в основу которой заложено наличие своего API. API в Shipyard — RESTful на базе формата JSON, совместим на 100% с Docker Remote API, предлагает дополнительные возможности (в частности — аутентификацию и управление списками доступа, логирование всех выполняемых операций). Этот API и является той базой, вокруг которой уже построен веб-интерфейс. Для хранения служебной информации, не относящейся напрямую к контейнерам и образам, в Shipyard используется RethinkDB. Веб-интерфейс позволяет управлять контейнерами (включая просмотр статистики и логов, подключение к консоли), образами, узлами кластера Docker Swarm, приватными реестрами (Registries).
Admiral
- Сайт; GitHub.
- Лицензия: Open Source (Apache License 2.0).
- ОС: Linux, Mac OS X, Windows.
- Языки/платформа: Java (фреймворк VMware Xenon).
Платформа от VMware, предназначенная для автоматизированного деплоя контейнеризированных приложений и управления ими на протяжении жизненного цикла. Позиционируется как легковесное решение, призванное упростить жизнь DevOps-инженерам. Веб-интерфейс позволяет управлять хостами с Docker, контейнерами (+ просмотр статистики и логов), шаблонами (образы, интегрированные с Docker Hub), сетями, реестрами, политиками (какие хосты какими контейнерами будут использоваться и как распределять ресурсы). Умеет проверять состояние контейнеров (health checks). Распространяется и разворачивается как Docker-образ. Работает с Docker 1.12+. (См. также знакомство с программой в блоге VMware с большим количеством скриншотов.)
DockStation
- Сайт; GitHub(без исходного кода).
- Лицензия: проприетарная (freeware).
- ОС: Linux, Mac OS X, Windows.
- Языки/платформа: Electron (Chromium, Node.js).
DockStation — молодой проект, созданный белорусскими программистами (которые, кстати, ищут инвесторов для его дальнейшего развития). Две главные особенности — ориентированность на разработчиков (не на DevOps-инженеров или сисадминов) с полноценной поддержкой Docker Compose и закрытость кода (бесплатно для использования, а за деньги авторы предлагают персональную поддержку и доработку возможностей). Позволяет не только управлять образами (поддерживается Docker Hub) и контейнерами (+ статистика и логи), но и заводить проекты с визуализацией связей контейнеров, задействованных в проекте. Также имеется парсер (находится в бета-версии), позволяющий конвертировать команды docker run в формат Docker Compose. Работает с Docker 1.10.0+ (Linux) и 1.12.0 (Mac + Windows), Docker Compose 1.6.0+.
Simple Docker UI
- GitHub.
- Лицензия: Open Source (MIT License).
- ОС: Linux, Mac OS X, Windows.
- Языки/платформа: Electron, Scala.js (+ React on Scala.js).
Простой интерфейс для работы с Docker, использующий Docker Remote API. Позволяет управлять контейнерами и образами (с поддержкой Docker Hub), подключаться к консоли, просматривать историю событий. Имеет механизмы удаления неиспользуемых контейнеров и образов. Проект находится в бета-версии и развивается очень медленно (реальная активность, судя по коммитам, утихла в феврале этого года).
Другие варианты
- Rancher — платформа управления контейнерами, обладающая функциями оркестровки и поддержкой Kubernetes. Open Source (Apache License 2.0); работает в Linux; написана на Java. Имеет веб-интерфейс Rancher UI на Node.js.
- Kontena — «дружелюбная к разработчикам платформа для запуска контейнеров в production», по существу конкурирующая с Kubernetes, но позиционируемая как более готовое «из коробки» и простое в использовании решение. Помимо CLI и REST API проект предлагает веб-интерфейс (скриншот) для управления кластером и его оркестровкой (включая работу с узлами кластера, сервисами, томами, секретами), просмотра статистики/логов. Open Source (Apache License 2.0); работает в Linux, Mac OS X, Windows; написана на Ruby.
- Data Pulley — простая утилита, имеющая минимум функций и документации. Open Source (MIT License); работает в Linux (имеется только пакет для Ubuntu); написана на Python. Поддерживает Docker Hub для образов, просмотр логов для контейнеров.
- Panamax — проект, задававшийся целью «сделать деплой сложных контейнеризированных приложений таким простым, как drag-n-drop». Для этого был создан свой каталог шаблонов для деплоя приложений (Panamax Public Templates), результаты из которого показываются при поиске образов/приложений наравне с данными из Docker Hub. Open Source (Apache License 2.0); работает в Linux, Mac OS X, Windows; написан на Ruby. Интегрирован с ОС CoreOS и системой для оркестровки Fleet. Судя по видимой в интернете активности, перестал поддерживаться в 2015 году.
- Dockly — консольный графический интерфейс для управления контейнерами и образами Docker. Open Source (MIT License); написан на JavaScript/Node.js.
P.S.
Читайте также в нашем блоге: