We've two options for docker. You can either build an image for running airsim linux binaries, or for compiling Unreal Engine + AirSim from source
- Install nvidia-docker2
-
Below are the default arguments.
--base_image
: This is image over which we'll install airsim. We've tested on Ubuntu 16.04 + CUDA 10.0.
You can specify any NVIDIA cudagl at your own risk.
--target_image
is the desired name of your docker image.
Defaults toairsim_binary
with same tag as the base image$ cd Airsim/docker; $ python build_airsim_image.py \ --base_image=nvidia/cudagl:10.0-devel-ubuntu16.04 \ --target_image=airsim_binary:10.0-devel-ubuntu16.04
-
Verify you have an image by:
$ docker images | grep airsim
-
Get an unreal binary or package your own project in Ubuntu.
Let's take the Blocks binary as an example.
You can download it by running$ cd Airsim/docker; $ ./download_blocks_env_binary.sh
-
Running an unreal binary inside a docker container The syntax is:
$ ./run_airsim_image_binary.sh DOCKER_IMAGE_NAME UNREAL_BINARY_SHELL_SCRIPT UNREAL_BINARY_ARGUMENTS -- headless
For blocks, you can do a
$ ./run_airsim_image_binary.sh airsim_binary:10.0-devel-ubuntu16.04 Blocks/Blocks.sh -windowed -ResX=1080 -ResY=720
-
DOCKER_IMAGE_NAME
: Same astarget_image
parameter in previous step. By default, enterairsim_binary:10.0-devel-ubuntu16.04
-
UNREAL_BINARY_SHELL_SCRIPT
: for Blocks enviroment, it will beBlocks/Blocks.sh
-
UNREAL_BINARY_ARGUMENTS
: For airsim, most relevant would be-windowed
,-ResX
,-ResY
. Click on link to see all options. -
Running in Headless mode:
Suffix-- headless
at the end:$ ./run_airsim_image_binary.sh Blocks/Blocks.sh -- headless
-
- Install nvidia-docker2
- Install ue4-docker
-
To get access to Unreal Engine's source code, register on Epic Games' website and link it to your github account, as explained in the
Required Steps
section here.
Note that you don't need to doStep 2: Downloading UE4 on Linux
! -
Build unreal engine 4.19.2 docker image. We're going to use CUDA 10.0 in our example.
$ ue4-docker build 4.19.2 --cuda=10.0 --no-full
[optional]$ ue4-docker clean
to free up some space. Details here -
Disk space:
- The unreal images and containers can take up a lot of space, especially if you try more than one version.
- Here's a list of useful links to monitor space used by docker and clean up intermediate builds:
- Build AirSim docker image (which lays over the unreal image we just built)
Below are the default arguments.
--base_image
: This is image over which we'll install airsim. We've tested onadamrehn/ue4-engine:4.19.2-cudagl10.0
. See ue4-docker for other versions.
--target_image
is the desired name of your docker image.
Defaults toairsim_source
with same tag as the base image$ cd Airsim/docker; $ python build_airsim_image.py \ --source \ ----base_image adamrehn/ue4-engine:4.19.2-cudagl10.0 \ --target_image=airsim_source:4.19.2-cudagl10.0
-
Run the airsim source image we built by:
./run_airsim_image_source.sh airsim_source:4.19.2-cudagl10.0
Syntax is
./run_airsim_image_source.sh DOCKER_IMAGE_NAME -- headless
-- headless
: suffix this to run in optional headless mode. -
Inside the container, you can see
UnrealEngine
andAirSim
under/home/ue4
. -
Start unreal engine inside the container:
ue4@HOSTMACHINE:~$ /home/ue4/UnrealEngine/Engine/Binaries/Linux/UE4Editor
-
Continue with AirSim's Linux docs.
-
Let's take the Blocks environment as an example.
In the following script, specify the full path to your unreal uproject file byproject
and the directory where you want the binaries to be placed byarchivedirectory
$ /home/ue4/UnrealEngine/Engine/Build/BatchFiles/RunUAT.sh BuildCookRun -platform=Linux -clientconfig=Shipping -serverconfig=Shipping -noP4 -cook -allmaps -build -stage -prereqs -pak -archive \ -archivedirectory=/home/ue4/Binaries/Blocks/ \ -project=/home/ue4/AirSim/Unreal/Environments/Blocks/Blocks.uproject
This would create a Blocks binary in
/home/ue4/Binaries/Blocks/
.
You can test it by running/home/ue4/Binaries/Blocks/LinuxNoEditor/Blocks.sh -windowed
- We're mapping the host machine's
PATH/TO/Airsim/docker/settings.json
to the docker container's/home/airsim_user/Documents/AirSim/settings.json
. - Hence, we can load any settings file by simply modifying
PATH_TO_YOUR/settings.json
by modifying the following snippets in *run_airsim_image_binary.sh
nvidia-docker run -it \ -v $PATH_TO_YOUR/settings.json:/home/airsim_user/Documents/AirSim/settings.json \ -v $UNREAL_BINARY_PATH:$UNREAL_BINARY_PATH \ -e SDL_VIDEODRIVER=$SDL_VIDEODRIVER_VALUE \ -e SDL_HINT_CUDA_DEVICE='0' \ --net=host \ --env="DISPLAY=$DISPLAY" \ --env="QT_X11_NO_MITSHM=1" \ --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \ -env="XAUTHORITY=$XAUTH" \ --volume="$XAUTH:$XAUTH" \ --runtime=nvidia \ --rm \ $DOCKER_IMAGE_NAME \ /bin/bash -c "$UNREAL_BINARY_COMMAND"
- We're mapping the host machine's
PATH/TO/Airsim/docker/settings.json
to the docker container's/home/airsim_user/Documents/AirSim/settings.json
. - Hence, we can load any settings file by simply modifying
PATH_TO_YOUR/settings.json
by modifying the following snippets inrun_airsim_image_source.sh
:nvidia-docker run -it \ -v $(pwd)/settings.json:/home/airsim_user/Documents/AirSim/settings.json \ -e SDL_VIDEODRIVER=$SDL_VIDEODRIVER_VALUE \ -e SDL_HINT_CUDA_DEVICE='0' \ --net=host \ --env="DISPLAY=$DISPLAY" \ --env="QT_X11_NO_MITSHM=1" \ --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \ -env="XAUTHORITY=$XAUTH" \ --volume="$XAUTH:$XAUTH" \ --runtime=nvidia \ --rm \ $DOCKER_IMAGE_NAME