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