docs/docker_ubuntu.md
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
--base_image: This is image over which we'll install airsim. We've tested on Ubuntu 18.04 with CUDA 10.0.
You can specify any NVIDIA cudagl at your own risk.
--target_image is the desired name of your docker image.
Defaults to airsim_binary with same tag as the base image$ cd Airsim/docker;
$ python build_airsim_image.py \
--base_image=nvidia/cudagl:10.0-devel-ubuntu18.04 \
--target_image=airsim_binary:10.0-devel-ubuntu18.04
$ docker images | grep airsim $ cd Airsim/docker;
$ ./download_blocks_env_binary.sh
Modify it to fetch the specific binary required.
$ ./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-ubuntu18.04 Blocks/Blocks.sh -windowed -ResX=1080 -ResY=720
DOCKER_IMAGE_NAME: Same as target_image parameter in previous step. By default, enter airsim_binary:10.0-devel-ubuntu18.04
UNREAL_BINARY_SHELL_SCRIPT: for Blocks enviroment, it will be Blocks/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
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 do Step 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
$ ue4-docker clean to free up some space. Details hereue4-docker supports all CUDA version listed on NVIDIA's cudagl dockerhub here.ue4-dockerDisk space:
--base_image: This is image over which we'll install airsim. We've tested on adamrehn/ue4-engine:4.19.2-cudagl10.0. See ue4-docker for other versions.--target_image is the desired name of your docker image.
Defaults to airsim_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_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.
UnrealEngine and AirSim under /home/ue4.ue4@HOSTMACHINE:~$ /home/ue4/UnrealEngine/Engine/Binaries/Linux/UE4Editorairsim_source containersproject and the directory where you want the binaries to be placed by archivedirectory$ /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
airsim_binary docker image:PATH/TO/Airsim/docker/settings.json to the docker container's /home/airsim_user/Documents/AirSim/settings.json.PATH_TO_YOUR/settings.json by modifying the following snippets in run_airsim_image_binary.shnvidia-docker run --runtime=nvidia -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" \
--rm \
$DOCKER_IMAGE_NAME \
/bin/bash -c "$UNREAL_BINARY_COMMAND"
Note: Docker version >=19.03 (check using docker -v), natively supports Nvidia GPUs, so run using --gpus all flag as given -
docker run --gpus all -it \
...
airsim_source docker image:PATH/TO/Airsim/docker/settings.json to the docker container's /home/airsim_user/Documents/AirSim/settings.json.PATH_TO_YOUR/settings.json by modifying the following snippets in run_airsim_image_source.sh: nvidia-docker run --runtime=nvidia -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" \
--rm \
$DOCKER_IMAGE_NAME