# Docker There are two ways to run ODM through Docker. One pulls the image from the Docker Hub and the other builds the image manually from a Dockerfile. OpenDroneMap is Dockerized, meaning you can use containerization to build and run it without tampering with the configuration of libraries and packages already installed on your machine. Docker software is free to install and use in this context. If you don't have it installed, see the [Docker Ubuntu installation tutorial](https://docs.docker.com/engine/installation/linux/ubuntulinux/) and follow the instructions up until "Create a Docker group" inclusive. You can also run docker on [Windows and OSX](https://docs.docker.com/engine/installation/). ## Option 1: Pull from Docker Hub This method is the fastest and most fool-proof method for running OpenDroneMap. You only need to run one command: ``` docker run -it --rm -v "$(pwd)/images:/code/images" -v "$(pwd)/odm_orthophoto:/code/odm_orthophoto" -v "$(pwd)/odm_georeferencing:/code/odm_georeferencing" opendronemap/odm --mesh-size 100000 ``` This will pull an ODM docker image [from the hub](https://hub.docker.com/r/opendronemap/odm/) and run through it. Let's break down each part. ``` docker run -it --rm ``` `-it` instructs Docker to allocate a pseudo-TTY connected to the container’s stdin; creating an interactive bash shell in the container. `--rm` will remove the container to save space (ODM projects can get big) ``` -v $(pwd)/images:/code/images -v $(pwd)/odm_orthophoto:/code/odm_orthophoto -v $(pwd)/odm_georeferencing:/code/odm_georeferencing ``` Here we are connecting 3 volumes. The path before the colon is the local, or host, path, and after the colon is the container path. Do not change the container path. `$(pwd)/images` is your input directory. and can be any **absolute** path. In our example, we use `$(pwd)` as shorthand for the absolute path to the current working directory. You can specify `-v :` any number of times. When ODM is done running, you can find the ODM products in `$(pwd)/odm_georeferencing` or whatever volume you mount. ``` opendronemap/odm ``` This is the tag that docker will use to find the OpenDroneMap image. If it is not found locally (i.e. it's your first time running) then it will look on Docker Hub and pull the image. ``` --mesh-size 10000 ``` Here is where you can pass in any parameter for OpenDroneMap. See [here](https://github.com/OpenDroneMap/OpenDroneMap/wiki/Run-Time-Parameters) for all the possible parameters. ## Option 2: Installation from source (Instructions below apply to Ubuntu 14.04, but the Docker image workflow has equivalent procedures for Mac OS X and Windows. See [docs.docker.com](docs.docker.com)) Once Docker is installed, an OpenDroneMap Docker image can be created like so: git clone https://github.com/OpenDroneMap/OpenDroneMap.git cd OpenDroneMap docker build -t my_odm_image . ## Running This run command is the same as in option 1 except you will specify `my_odm_image` as the tag instead of `opendronemap/opendronemap`. docker run -it --rm \ -v $(pwd)/images:/code/images \ -v $(pwd)/odm_orthophoto:/code/odm_orthophoto \ -v $(pwd)/odm_texturing:/code/odm_texturing \ my_odm_image You can see a breakdown in the section above. ## Checking & Changing default Docker settings (RAM and CPUs) Before running ODM it's advised to check that Docker is allocating sufficient resources to containers. In Windows this can be done in the 'Docker for Windows' program under the 'Advanced' tab.