Создание и запуск Docker-контейнера с TrueConf VideoSDK
Docker и его отличия от виртуальной машины
Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в средах с поддержкой контейнеризации. Позволяет “упаковать” приложение со всем его окружением и зависимостями в контейнер, который может быть в дальнейшем развёрнут. Предоставляет набор команд для управления этими контейнерами.
Технологии Docker и виртуальных машин имеют общее предназначение, но работают с ОС по разному принципу. Главное отличие — виртуальная машина представляет собой дополнительный слой абстракции поверх реального оборудования с драйверами, а Docker-контейнер использует напрямую аппаратное обеспечение хостовой машины.
Что такое TrueConf VideoSDK
TrueConf VideoSDK — программное решение для создания корпоративных приложений с интегрированной видеоконференцсвязью TrueConf, является основой для TrueConf Room, то есть TrueConf Room представляет собой TrueConf VideoSDK с полнофункциональным веб-интерфейсом для управления видеоконференцсвязью. Подробнее о TrueConf VideoSDK и его отличиях от TrueConf Room можно узнать здесь. Также TrueConf предоставляет NuGet пакет для облегчения .NET разработки, ознакомиться с ним можно здесь.
Этот комплект инструментов помогает разработчикам создавать высококачественные приложения, облегчая процесс разработки. С помощью TrueConf VideoSDK можно интегрировать технологию видеоконференцсвязи в терминалы самообслуживания, информационные киоски или корпоративные программные решения.
Ограничения TrueConf VideoSDK в контейнере
В основном возможности VideoSDK на локальной машине и в контейнере идентичны, за исключением отсутствия у последнего Front-End’а, то есть отсутствия вывода главного экрана и раскладки конференции на монитор. Это связано с ограничениями самих контейнеров.
Как развернуть контейнер с VideoSDK на своём ПК
В данном примере будет рассмотрена установка и настройка Docker, развёртывание контейнера на операционной системе Debian 12, содержимое контейнера — TrueConf VideoSDK версии 4.3. Для установки Docker в ОС:
- Обновите список пакетов, для этого выполните в терминале ОС команду
- Установите необходимые для работы с удалёнными репозиториями дополнительные пакеты с помощью команды
- Скачайте и добавьте PGP ключ от репозитория Docker. Для этого выполните команду
- Добавьте репозиторий Docker, для этого выполните команду
- Обновите списки доступных пакетов
- Установите Docker и дополнительные пакеты с помощью команды
| 1 | sudo apt update | 
| 1 | sudo apt -y install ca-certificates curl gnupg lsb-release | 
| 1 | curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg | 
| 1 | echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null | 
| 1 | sudo apt update | 
| 1 | sudo apt -y install docker-ce docker-ce-cli containerd.io | 
Запуск и автозагрузка Docker
После завершения установки Docker выключен по умолчанию, для запуска выполните команду:
| 1 | sudo systemctl start docker | 
Для добавления Docker в автозагрузку выполните команду
| 1 | sudo systemctl enable docker | 
Добавление пользователя в группу Docker
По умолчанию использовать Docker может только пользователь root: если выполнить команду Docker от обычного пользователя, в терминале отобразится ошибка. Для запуска команд Docker от обычного пользователя и без использования команды sudo необходимо добавить текущего пользователя ОС в группу docker. Группа docker создается автоматически при установке, проверить её наличие можно с помощью команды:
| 1 | groups $USER | 
Если по какой-то причине она не создалась автоматически, её необходимо создать вручную. Для этого выполните команду
| 1 | sudo groupadd docker | 
Далее для добавления текущего пользователя в группу docker необходимо выполнить команду
| 1 | sudo usermod -aG docker user_name | 
, где user_name — имя пользователя, которого нужно добавить в группу docker. Для проверки выполните команду
| 1 | docker ps | 
она отображает список запущенных контейнеров.
Запуск первого контейнера
Чтобы полноценно проверить корректность установки Docker, загрузите тестовый образ. Для этого необходимо выполнить команду
| 1 | docker run hello-world | 
Данная команда загрузит образ программы из онлайн-репозитория Docker hub (официальный реестр хранения образов программного обеспечения от Docker который используется по умолчанию) и автоматически запустит его. После выполнения будет выведена фраза Hello from Docker!, которая означает корректную установку и настройку Docker.
Как собрать свой контейнер с VideoSDK
Сборка контейнера
Создание контейнера выполняется в момент его запуска, и эти процессы в свою очередь запускаются с помощью команды
| 1 | docker run | 
Утилите нужно передать образ, на основе которого будет создан контейнер, а также Dockerfile — файл конфигурации, в котором содержатся инструкции по созданию образа. Образ может быть локальным (находиться на компьютере) или указывать на образ, который надо загрузить из сети (Docker hub и др.). В данном случае образ будет использоваться из локального хранилища. Скачайте VideoSDK с нашего корпоративного GitHub, обязательно выберите вариант для Ubuntu 22.04:
По кнопке ниже можно скачать архив с файлом Docker, перед использованием распакуйте архив.
Нужно уточнить, что по умолчанию процессы в контейнере работают из-под пользователя root, но работать под рутом небезопасно, ввиду отсутствия ограничений у такого пользователя. Для предотвращения попадания нежелательной угрозы из контейнера на локальную машину, при сборке контейнера принудительно создается пользователь с обычным набором прав.
В данном примере Dockerfile и образ VideoSDK находятся в одной директории, в ином случае укажите директорию Dockerfile с помощью флага -f. Команда для создания контейнера с VideoSDK будет выглядеть следующим образом:
| 1 | docker build --build-arg username=sdkuser --build-arg password=123sdk456 -t tcvideosdk /home/$USER/dockerresources/videosdk | 
где:
- --build-arg username=sdkuser— имя пользователя;
- --build-arg password=123sdk456— пароль пользователя;
- -t tcvideosdk— имя образа;
- /home/$USER/dockerresources/videosdk— путь к папке с Dockerfile и образом контейнера.
После выполнения команды начнётся сборка контейнера, весь процесс отображается в терминале. После окончания сборки выводится сообщение [+] Building 1169.1s (12/12) FINISHED.
Проверка сборки
Запустите созданный контейнер с помощью команды:
| 1 | docker run -it -d -p 2222:8080 -p 3333:8765 -p 4444:8766 tcvideosdk:latest | 
где:
- -it— подключает интерактивный терминал tty в контейнер;
- -d— запуск контейнера в фоне;
- -p 3333:8765 -p 4444:8766 tcvideosdk:latest— устанавливает порты для web-сокета и http-порта.
Чтобы отобразить в терминале список запущенных контейнеров введите команду
| 1 | docker ps | 
| 1 2 3 4 5 | alexadmin@DebDocker1:-5 dockerer run -it -d -p 2222:8080 -p 3333:8765 -p 4444:8766 tcvideosdk:latest f756fb106cedc657a51a90bad8996a03049e67d4a9402919e6b6b7aeada66ab4 alexadmin@DebDocker1:-5 docker ps CONTAINER ID  IMAGE              COMMAND                 CREATED        STATUS        PORTS         NAMES 1756fb106ced  tcvideosdk:latest  "sh -c 'supervisord ."  9 seconds ago  Up 8 seconds  0.0.0.0:2222->8080/tcp, :::2222->8080/tcp,0.0.0.0:3333->8765/tcp, :::3333->8765/tcp, 0.0.0.0:4444->8766/tcp, :::4444->8766/tcp  affectionate_dewdney alexadmin@DebDocker1:-5 | 
Как видно из вывода терминала выше, контейнер успешно запущен и отображается в терминале.
Проверьте доступность портов 3333 и 4444 с помощью команды
| 1 | telnet localhost port | 
где port — порт для проверки.
| 1 2 3 4 5 6 7 8 9 10 | alexadmin@DebDocker 1:~$ telnet localhost 3333 Trying ::1… Connected to localhost. Escape character is ']'. Connection closed by foreign host. alexadmin@DebDocker 1:~$ telnet localhost 4444 Trying : : 1. Connected to localhost. Escape character is Connection closed by foreign host. | 
В терминале вывелось сообщение “Connected to localhost”, порт функционирует.
Для проверки http-порта и web-сокета выполните http-запрос:
| 1 | http://10.140.2.233:2222/public/default/config.json | 
Выполненный http-запрос вернет следующие данные:
| 1 2 3 4 5 6 7 8 9 | {"config":   {"websocket":     {"hostname":null,     "port":8765},   "http":     {"hostname":null,     "port":8766}     }   } | 
 
            