|Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.|
Getting started with ROS and DockerDescription: This tutorial walks you through installing Docker and spinning up your first ROS container on your computer.
Keywords: ROS, Docker
Tutorial Level: BEGINNER
For reasons you'll come to understand in a bit, a host installation of ROS is not required for most of these tutorials unless otherwise specified. To quickly grasp how this is possible with Docker, it's recommended you try it out with the online tutorial.
Before starting this tutorial please complete installation as described in Docker's installation instructions. Installation instructions are available for multiple operation systems including Ubuntu, Mac OS x, Debian, Fedora and even Microsoft Windows. ¯\_(ツ)_/¯
Note that for recent Linux distros, the installation really just boils down to running a single wget command. You may also want add your user to the docker group to avoid having to use sudo permissions when you use the docker command, as also noted further into Docker's installation instructions.
Using ROS images
Pulling ROS images
Now that you have Docker installed, lets pull down a ROS container image:
docker pull ros
Take a look at the Official ROS Repo and you'll find additional tag names you can use to help specify what exact version and/or meta package level you'd like to use. The tags are built from each other in the same manner as the respective ROS metapackage dependencies interlink, i.e. if you were to pull:
docker pull ros:indigo-robot
You would then also then locally posses the "indigo-ros-core" and "indigo-ros-base" tagged images as well.
Running ROS containers
Now that you have the ROS image downloaded, you can spin up a container from it by calling:
docker run -it ros
This will move you into an interactive session with the running container. From here, it's basically as if you're in a new bash terminal separate from your host machine. Now run the roscore command and you will see ros master startup.
In a new terminal on the host machine, find the name of your new container, last container started using:
$ docker ps -l
Using the name of the container as the ID, in writing this tutorial docker happened to assign the string "nostalgic_morse", we can start additional bash session in the same container by running:
docker exec -it nostalgic_morse bash
Once inside, we'll need to setup our environment by either sourcing ROS's setup.bash:
or by running ros_entrypoint.sh script in the root directory, the same entrypoint the ROS images use by defult. We can then run a ROS command such as:
and see that roscore is running and publishing both rosout and rosout_agg topics.
Stopping ROS containers
To stop containers, we merely need to stop the original processes run by docker run command. We can switch back to the terminal where roscore is running and hit ctrl-c to stop the ROS process, and then exit to terminate the bash shell. You can also use the docker CLI to tell the docker daemon to stop or remove the running container directly. Check the stop and rm docs here for details.