Конфигурация контейнера Docker
This article describes the Docker container configuration process. Docker enables you to develop or run your UNIGINE-based application in different environments in isolation inside the container. Your computer needs to have an NVIDIA graphic card and Linux system with Ubuntu to replicate all necessary steps.В этой статье описывается процесс настройки контейнера Docker. Docker позволяет разрабатывать или запускать приложение на основе UNIGINE в различных средах изолированно внутри контейнера. Для выполнения всех необходимых действий на вашем компьютере должна быть установлена графическая карта NVIDIA и система Linux с поддержкой Ubuntu.
To work within other distributions, like Amazon, Open Suse, Debian, Centos, or RHEL, please refer to the NVIDIA Container Toolkit documentation.Для работы с другими дистрибутивами, такими как Amazon, Open Suse, Debian, Centos или RHEL, пожалуйста, ознакомьтесь с документацией NVIDIA Container Toolkit.
System RequirementsСистемные требования#
You need to shut down all the programs playing sound. The ALSA driver should be installed in the system to play the sound correctly.Вам необходимо выключить все программы, воспроизводящие звук. Для корректного воспроизведения звука в системе должен быть установлен драйвер ALSA.
The Docker daemon binds to a Unix socket, not a TCP port. By default it's the root user that owns the Unix socket, and other users can only access it using sudo (read more). The Docker daemon always runs as the root user.Демон Docker привязывается к сокету Unix, а не к TCP-порту. По умолчанию сокетом Unix владеет пользователь root, а другие пользователи могут получить к нему доступ только с помощью sudo (читать подробнее). Демон Docker всегда запускается от имени пользователя root.
If you don't want to preface the docker command with sudo, create a Unix group called docker and add users to it (read more). When the Docker daemon starts, it creates a Unix socket accessible by members of the docker group.Если вы не хотите писать sudo перед командой docker, создайте группу Unix с именем docker и добавьте в нее пользователей (читать подробнее). Когда запускается демон Docker, он создает сокет Unix, доступный членам группы docker.
Docker ConfigurationНастройка Docker#
To configure Docker perform the following steps:Чтобы настроить Docker, выполните следующие действия:
- Install NVIDIA Container ToolkitУстановите NVIDIA Container Toolkit
- Get the Docker container image or assemble it yourself. Получите образ контейнера Docker или соберите его самостоятельно.
- Run a Docker container in test mode. Запустите контейнер Docker в тестовом режиме.
NVIDIA Container Toolkit InstallationУстановка NVIDIA Container Toolkit#
-
Configure NVIDIA Container Toolkit according to its configuration documentation. Install the package repository and the GPG key, type the command line for that:Настройте NVIDIA Container Toolkit в соответствии с руководством по настройке. Установите репозиторий пакетов и ключ GPG, введите для этого в командной строке:
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
-
Install nvidia-docker2:Установите nvidia-docker2:
$ sudo apt-get update $ sudo apt-get install -y nvidia-docker2
-
Restart Docker:Перезапустите Docker:
$ sudo systemctl daemon-reload $ sudo systemctl restart docker
Preparing Container ImageПодготовка образа контейнера#
There is a ready-to-use container image that we have prepared for you on the Docker Hub - check out the following link run-unigine-in-docker and use the following command:На Docker Hub есть готовый к использованию образ контейнера, который мы подготовили для вас — перейдите по ссылке run-unigine-in-docker и используйте следующую команду:
docker pull unigine/run-unigine-in-docker
In case for any reason instead of using the container image from the Docker Hub you want to prepare and assemble your container image manually please follow the instructions in the spoiler below:В случае, если по какой-либо причине вместо использования образа контейнера из Docker Hub вы захотите подготовить и собрать свой образ контейнера вручную, пожалуйста, следуйте инструкциям в спойлере ниже:
-
Create a folder to work with the container:Создайте папку для работы с контейнером:
$ mkdir ~/unigine-in-docker
-
Create a Dockerfile text file inside the unigine-in-docker/ folder:Создайте текстовый файл Dockerfile в папке unigine-in-docker/:
$ cd ~/unigine-in-docker $ touch Dockerfile
-
Add the following lines to the Dockerfile file and save it:Добавьте следующие строки в файл Dockerfile и сохраните его:
FROM nvidia/opengl:base-ubuntu20.04 VOLUME /tmp/.X11-unix RUN apt update && apt upgrade -y # linux-headers- hardcoded, if it don't build - try update version of linux-headers RUN DEBIAN_FRONTEND=noninteractive apt-get update && DEBIAN_FRONTEND=noninteractive apt install -y \ python3 \ wget gnupg \ xvfb \ x11-xserver-utils \ python3-pip \ libegl1-mesa \ libgl1-mesa-dev \ libxv1 \ gcc g++ make ccache \ libxrandr-dev \ libxinerama-dev \ libopenal1 \ libxrender-dev \ libxext-dev \ libc6-dev \ libx11-dev \ libxi-dev \ libxml2-dev \ cmake \ nano vim \ lshw \ libglu1-mesa \ mesa-utils \ glmark2 \ xxd \ # for sdk bro2 \ libxcb-shape0 \ libxcb-xkb1 \ libxcb-icccm4 \ libxcb-image0 \ libxcb-keysyms1 \ libxcb-render-util0 \ libxkbcommon-x11-0 \ linux-headers-5.4.0-135-generic \ lxterminal \ # sound \ alsa-base \ alsa-utils \ libsndfile1-dev COPY ./asound.conf /etc/ RUN python3 -m pip install pyinotify ENV XDG_RUNTIME_DIR=/tmp/.X11-unix # install dotnet and runtime # if it don't build - try to find more recent versions of dotnet at https://dotnet.microsoft.com/en-us/download/dotnet/6.0 RUN wget -O dotnet.tar.gz https://download.visualstudio.microsoft.com/download/pr/01292c7c-a1ec-4957-90fc-3f6a2a1e5edc/025e84c4d9bd4aeb003d4f07b42e9159/dotnet-sdk-6.0.418-linux-x64.tar.gz RUN wget -O dotnet-runtime.tar.gz https://download.visualstudio.microsoft.com/download/pr/b63daa46-51f4-480e-ad03-ef2c5a6a2885/ae059763456991305109bf98b3a67640/aspnetcore-runtime-6.0.26-linux-x64.tar.gz RUN mkdir /usr/local/etc/dotnet-sdk-6.0 RUN tar -xzf dotnet.tar.gz -C /usr/local/etc/dotnet-sdk-6.0 RUN tar -xzf dotnet-runtime.tar.gz -C /usr/local/etc/dotnet-sdk-6.0 RUN rm -rf /usr/bin/dotnet RUN ln -s /usr/local/etc/dotnet-sdk-6.0/dotnet /usr/bin/dotnet # path to libraries ENV LD_LIBRARY_PATH="/opt/project/bin"
-
Create a new asound.conf file:Создайте новый файл asound.conf:
$ sudo vi asound.conf
-
Write the following script to the asound.conf file:Запишите следующий скрипт в файл asound.conf:
pcm.!default { type plug slave { pcm "hw:0,0" } } ctl.!default { type hw card 0 } pcm.mixed-analog { type plug slave.pcm "dmix-analog" hint { show on description "Mixed Analog Output - Use analog outputs, converting samples, format, and rate as necessary. Allows mixing with system sounds." } } # Control device (mixer, etc.) for the card ctl.mixed-analog { type hw card 0 }
-
Assemble the Docker image (inside the unigine-in-docker folder):Соберите образ Docker (внутри папки unigine-in-docker):
$ docker build --rm --tag run_unigine_in_docker:latest -f Dockerfile .
Docker Test RunТестовый запуск Docker#
-
Launch the container in trial mode to view GPU characteristics:Запустите контейнер в пробном режиме, чтобы просмотреть характеристики графического процессора:
$ cd ~/unigine-in-docker/ $ docker run -it --rm --network host \ --runtime=nvidia --gpus 0 -e NVIDIA_VISIBLE_DEVICES=0 \ -e DISPLAY=${DISPLAY} \ -e NVIDIA_DRIVER_CAPABILITIES=display,compute \ -v /tmp/.X11-unix:/tmp/.X11-unix \ run_unigine_in_docker:latest \ /bin/bash # nvidia-smi
-
Check selected GPU drivers with the following command: glxinfo | grep "OpenGL". You will see the full information about your GPU. Or use the command glxinfo | grep "OpenGL renderer" to display the model name of the GPU used. An example of the response:Проверьте выбранные драйверы графического процессора с помощью следующей команды: glxinfo | grep "OpenGL". Вы увидите полную информацию о графическом процессоре. Или используйте команду glxinfo | grep "OpenGL renderer" для отображения названия модели используемого графического процессора. Пример вывода:
Using Docker ContainerИспользование контейнера Docker#
As You have successfully built and run GPU-accelerated Docker container you can do the following:После создания и запуска контейнера Docker с графическим ускорением, вы можете выполнить следующие действия:
- Develop your project using UnigineEditor or run an application (Engine instance) via SDK Browser (version 2.0.13+).Начать разработку своего проекта с помощью UnigineEditor или запустить приложение (экземпляр движка) через SDK Browser (версия 2.0.13+).
- Run a UNIGINE-based application. Запустить UNIGINE-приложение.