Создание и запуск 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}     }   }  |