четверг, 12 сентября 2019 г.

OMV & Docker

OpenMediaVault 4 и контейнеры Docker.


   OMV v4.1.23-1 - это заключительный выпуск в линейке 4.х.х. Рассмотрим некоторые моменты его настройки и использования.

   Процесс установки остался практически без изменений. 
OpenMediaVault 4.х.х содержит в себе сетевую утилиту IP. Для отображения сетевых интерфейсов в консоле OMV нужно ввести команду: 
   ip a 
   Ключ a указан, чтобы увидеть все сетевые интерфейсы, в том числе и те, которые в данный момент не имеют настроенного IP. Как минимум будет отображено два интерфейса (lo — интерфейс обратной петли и сетевой интерфейс, имя которого имеет вид "enpXsX"). Смотрим enpXsX (например enp5s0), параметры link/ether и inet (относится к IPv4). 

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group ...
2: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:8b:46:9a brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe8b:469a/64 scope link
       valid_lft forever preferred_lft forever

   08:00:27:8b:46:9a  - это mac-адрес сетевой карты OMV
   10.0.2.15               - это ip-адрес сетевой карты OMV

   Информация о всех актуальных дополнительных плагинах "третьей стороны" для дистрибутивов OpenMediaVault версии 4.х.х, как и прежде содержится в пакете <openmediavault-omvextrasorg_latest_all.deb>. Этот пакет скачиваем на управляющий ПК, пройдя по указателю:
   https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/openmediavault-omvextrasorg_latest_all4.deb (v 4.1.16 )
   Для отображения всех дополнительных плагинов "третьей стороны" в OMV выполним следующее:
   В разделе Система открываем подраздел Плагины, нажимаем кнопку Загрузить и в открывшимся окне указываем на загруженный пакет <openmediavault-omvextrasorg_latest_all.deb>. Нажимаем ОК.
   После того, как плагин  <оpenmediavault-omvextrasorg ...>  появится в списке плагинов, отмечаем его чекбокс и нажимаем кнопку Установить.
   После установки перезагружаем OMV, в разделе Система открываем подраздел Плагины и нажимаем на кнопку Проверка.
   По окончании проверки, в вэб-интерфейсе OMV на вкладке Плагины, будут отображены все плагины, доступные на текущий момент для использования в OMV версии 4.х.х, а также в разделе Система появится подраздел OMV-Extras.
   Поддержка и обновление этих плагинов не всегда стабильна и своевременна, поэтому может быть сложно найти и устранить неполадки и исправить ошибки нужного сервиса, представляемого плагином. Однако в OMV имеется возможность запускать некоторые сервисы используя «контейнерную виртуализацию».

   «Контейнерная виртуализация» – это набор процессов, изолированный от остальной операционной системы и запускаемый с отдельного образа, который содержит все файлы, необходимые для их работы. Контейнеры используют одно и то же ядро операционной системы и изолируют процессы приложения от остальной системы. Технология с открытым кодом Docker – это наиболее востребованный инструментарий развёртывания и управления Linux-контейнерами.

   Прежде чем использовать технологию Docker для запуска нужных сервисов, необходимо установить и включить плагин Docker GUI - веб-интерфейс для управления контейнерами Docker. 
   Для этого требуется установленный и включённый плагин <оpenmediavault-omvextrasorg ...>. 
   В разделе Система открываем подраздел OMV-Extras и двойным кликом по неактивной кнопке напротив строки Docker CE repo (репозиторий Docker Community Edition) открываем окно Edit repo. В этом окне активируем кнопку Включить. Перезагружаем OMV.
   После перезагрузки, в разделе Система на вкладке Плагины появится плагин <оpenmediavault-docker-gui> (v 4.1.5). Отмечаем его чекбокс и нажимаем кнопку Установить. После установки перезагружаем OMV.
   Теперь в разделе Сервисы появился подраздел Докер. Переходим на страницу этого подраздела и активируем кнопку Включить плагин, нажимаем кнопку Сохранить и перезагружаем OMV.


Докер. Включить плагин

Примечание. Особенности локализации:
This setting does not stop/disable or start/enable the docker daemon - Этот параметр не останавливает/отключает или запускает/включает демон docker.
Warn when modifying container - Предупреждать при изменении контейнера.

  В веб-интерфейсе управления контейнерами Докер, на вкладке Docker images repo (Репозиторий Докер-образов) можно выбрать и загрузить нужный контейнер с приложением - выбор большой.


Репозиторий Докер-образов, перечень далеко не полный.

   Для каждого приложения, которое планируется использовать в OMV, необходимо загрузить образ, а затем запустить контейнер этого образа с определёнными параметрами.
   Контейнеры Docker по своей конструкции не позволяют их запущенному приложению иметь доступ ко всему, что не указано явно. Без правильной настройки они не смогут видеть медиа-контент, хранящийся на жёстких дисках, или, например, подключаться к интернету. 

   Docker-контейнер для Plex Media Server.

1. Предварительные настройки OMV.
   Plex Media Server работает как специально созданный пользователь plex внутри контейнера. Этот пользователь не может существовать вне контейнера и, таким образом, параметры PLEX_UID и PLEX_GID используются для установки идентификатора пользователя и идентификатора группы этого пользователя внутри контейнера.
   Можно запускать Docker от имени пользователя OMV root, но это считается моветоном, поэтому создаётся учётная запись пользователя - администратора Docker'а, права которой задаются исходя из соображений безопасности сервера.
Примечание. Такой приём связан с изначальным предназначением базовой Debian Linux - многопользовательская многозадачная ОС, где защищённость системы превыше всего. Имхо, для домашнего использования в локальной сети можно запускать Docker от имени пользователя OMV root.
   В подразделе Пользователь (раздел Управление правами доступа) создаём (супер)пользователя - администратора Docker'а, например dockadmin (с паролем). Добавление этого пользователя в группу users будет выполнено автоматически. Также пользователя - администратора Docker'а можно дополнительно присоединить и к другим группам, отметив чекбокс у нужной группы
   Затем нужно узнать UID и GID пользователя - администратора Docker'а для последующей корректировки Переменных среды. Используя SSH-клиент подключаемся к OMV и выполняем команду:
    id dockadmin
Результат:
    uid=1000(dockadmin) gid=100(users) groups=100(users)

    
2. Загрузка и настройка контейнера.    
   На вкладке Docker images repo (Репозиторий Докер-образов) в столбце Действие нажимаем значок загрузки нужного Докер-образа и в открывшемся окне Тянуть образ нажимаем Старт. 
Загрузка закончится строками:
   Status: Downloaded newer image for linuxserver/plex:latest
   docker.io/linuxserver/plex:latest
Закрываем окно и в столбце Действие нажимаем значок Запустить образ.
Примечание. При нажатии значка «i» откроется страница описания и полезной информации о контейнере.
   Открывается окно Run image для настройки параметров Docker-контейнера.

  Общее.
- Задайте Название контейнера. (plex-media)
- Sync time with host (Синхронизация времени с хостом)
- Restart Policy (Политика Перезагрузки): no(нет) /always(всегда) /unless stopped(если не остановлен) /on-failure(при сбое)


Run image. Общее


  Сеть
- Сетевой режим: bridge /host /macvlan
Вы должны решить, какой тип сети вы хотите использовать.
 Сеть bridge (значение по умолчанию) создаёт совершенно новую сеть внутри хоста и запускает контейнеры внутри неё. Эта сеть подключена к физической сети через внутренний маршрутизатор, и докер настраивает этот маршрутизатор для перенаправления определённых портов в контейнеры внутри. 
 Сеть host использует IP-адрес хоста, на котором работает докер, так что сеть контейнера выглядит как хост, а не как самостоятельная. 
 Сеть macvlan создаёт новый виртуальный компьютер в сети, который является контейнером. 
По задачам создания plex-контейнера, host и macvlan очень похожи по конфигурации. Использование host или macvlan является более простым в настройках и имеет наименьшее количество проблем, которые, возможно придётся обойти. Однако некоторые функции могут быть ограничены выполнением только в режиме bridge. Plex может работать в этом режиме, но он более сложный.


Run image. Сеть, варианты настройки


  Переменные среды (Environment variables)
  Если открыть окно Детали о образе (Докер > Обзор > Docker Images > Детали) для linuxserver/plex, то можно увидеть переменные, заданные по умолчанию:


Детали о образе. Раздел Environment variables ("Env")


  Потребуется изменить переменную PLEX_DOWNLOAD и добавить ещё несколько дополнительных переменных:
  Чтобы Plex Media Server работал с теми же разрешениями, что и у пользователя - администратора Docker'а, нужно добавить переменные PUID и PGID со значениями этого пользователя (uid=1000(dockadmin) gid=100(users)).
  Переменная ALLOWED_NETWORKS и записи IP/сетевой маски предоставляют доступ к серверу без авторизации. Например 192.168.1.0/24 позволит получить доступ к целому диапазону 192.168.1.x
  Значение PLEX_DOWNLOAD изменяем на https://plex.tv/downloads/latest/1?channel=8&build=linux-ubuntu-x86_64&distro=ubuntu
  В столбце Name пишем переменную, в столбце Value - её значение, жмём Добавить (+). Жмём Редактировать (карандаш) в строке  PLEX_DOWNLOAD, вводим новое значение, жмём Commit (v).


Run image. Переменные среды


   Volumes and Bind mounts - Тома и Привязки смонтированного
   Bind mounts - Привязки смонтированного
   Привязка смонтированного - альтернативный вид дерева каталогов. Классически, монтирование создаёт представление устройства хранения в виде дерева каталогов. Вместо этого связывающее монтирование берёт существующее дерево каталогов и обеспечивает его просмотр в другом месте. Процессы, не связанные с Docker, на хосте Docker или в контейнере Docker могут изменять устройства хранения в любое время.
Примечание. Каталоги и файлы в bind mount такие же, как и в оригинале, но возможно задать для них разных владельцев и разрешения. 
   Volumes - Тома докера
Когда вы создаете том, он сохраняется в каталоге на хосте Docker. Когда вы монтируете том в контейнер, этот каталог является тем, что монтируется в контейнер. Это похоже на то, как работает bind mounts, за исключением того, что тома управляются Docker и изолированы от основной функциональности хост-машины.
Привязки смонтированного имеют ограниченную функциональность по сравнению с Volumes - Томами контейнера. Когда вы используете связывающее монтирование, файл или каталог на хост-машине монтируется в контейнер. На файл или каталог ссылается его полный или относительный путь на хост-компьютере. Напротив, при использовании Тома контейнера в каталоге хранилища Docker на хост-машине создаётся новый каталог, и Docker управляет содержимым этого каталога. Такой каталог не должен уже существовать на хост-машине и он создаётся по запросу.
В отличие от привязки смонтированного, вы можете создавать и управлять томами вне области действия любого контейнера.
Тома являются предпочтительным вариантом для сохранения данных, создаваемых и используемых контейнерами Docker.
 - Note that if the "Container path” field is left blank a new data volume will be created - 
Обратите внимание, что если поле "Container path" оставить пустым, то будет создан новый Том данных.
Host path - путь к каталогу хранения на хост-машине контейнера   
Container path - путь в контейнер к каталогу просмотра 

   Volumes from - Тома из контейнера
From container (из контейнера)

Run image. Тома и Привязки смонтированного

Примечание.
- Если вы смонтируете пустой том в каталог в контейнере, в котором существуют файлы или каталоги, эти файлы или каталоги распространяются (копируются) в том. Аналогично, если вы запускаете контейнер и указываете том, который ещё не существует, то создаётся пустой том.
- Если вы выполните привязку смонтированного или смонтируете непустой том в каталог в контейнере, в котором существуют некоторые файлы или каталоги, то эти файлы или каталоги будут скрыты монтированием. Затенённые файлы не удаляются и не изменяются, но недоступны во время использования тома или привязки смонтированного.


   Extra arguments - Дополнительный аргумент
 - These extra arguments will be passed to docker when running the container - Эти дополнительные аргументы будут переданы докеру при запуске контейнера (Например аргументы времени выполнения)

  Container command - Контейнерная команда
 - This command and any arguments will be passed to the container - Эта команда и любые аргументы будут переданы в контейнер


Run image. Аргументы и Команды


   Нажимая кнопку Сохранить мы запускаем контейнер. При необходимости изменить настройки параметров Docker-контейнера выделяем строку с нужным контейнером и нажимаем кнопку Modify.

Модифицировать Run image

   Появляется следующее окно:



Где сказано:
Будьте осторожными, все непостоянные данные в контейнере будут удалены
Пожалуйста, смотрите здесь для получения дополнительной информации:
Link
Это предупреждение можно отключить на вкладке Настройки

Нажатие ОК откроет окно Run image для настройки/изменения параметров Docker-контейнера.

Войти в вэб-интерфейс plex в докере можно по указателю  http://serverIP:32400/web


Контейнерная виртуализация - ещё один геморрой пользователя