I have been experimenting with Docker a lot lately both at work and for some of my hobby projects at home. It has saved me a lot of hassle when it comes to installing and managing my software’s dependencies. It is particularly powerful when combined with a continuous integration system like TravisCI or GitLab CI. I have only been using it for about six months, and I am already wondering how I ever got by without it. If you are a developer and have never used Docker, you should consider spending some time learning it. The initial time investment pays off quickly.
Docker is a free tool that helps application developers solve the problem of “dependency hell” by allowing them to package their software and its dependencies into a Linux container. In recent years, Docker has seen a rapid rise in popularity, especially in the web application space. ROS and Gazebo, along with many other open-source packages, have started providing Docker images and documentation on their use. At first, it took me many frustrating hours to get going with Docker for ROS and Gazebo. I struggled to find good examples out there in the wild. After finally getting it all sorted out, I released my own Docker image for my Bobble-Bot simulation. The image even allows for users to run the 3D graphics from within the container by using the nvidia-docker2 run time. Once I got this all working, I decided it would be a good idea to document my experience on my blog. Check out my notes on that experience here.
Hopefully this article is helpful to others that are considering going down a similar path. I plan to follow up with another article soon discussing how I am using the image to continuously run automated tests of my simulation. The end result is an assurance that the Bobble-Bot open-source release is always in working order. The whole thing would have been much more difficult to accomplish without the existence of Docker.