(this question/discussion is also in http://answers.ros.org/question/242793/conceptual-question-on-ros-docker/ but I’ve suggested to post here to gain better visibility)
I’ve been reading the different resources about Docker+Ros I found on the web + the video of Ruffin White talk in Roscon2015… So I see great potential of Docker with ROS for usecases such as testing and Continuous integration, or deployment on robots for a robot manufacturer etc… basically when what I need is to run a clean version, without adding any modification to the image/container…
But I think I’m missing a concept or at least I’d like discuss the usefulness of Docker on another usecase…
We are working on an internal “product” that is a big collection of ROS nodes. So we rely on ROS and ROS-Industrial packages, plus some third party drivers for hardware, specific libraries etc… We have our own Continuous Integration Buildbot server that generates a Debian from the catkin-install output (on different slaves to account for the linux/ros-distribution mix).
When we need to set-up a new machine, we need to install ubuntu, ros, then our script to install all the required libraries and dependencies, and finally install our Deb. Then start working, developping and customizing the final application for the robotic cell deployment.
So, building a Docker container to host all this looks like a great solution to provide a clean install of our product/solution both internally or to our external partners/clients. Another option would to provide a kind of Vagrant or Chef cookbook to automate the correct deployment of a new machine, external libraries script execution and my product deb installation… (any opinion on the most suitable strategy?)
However, and this is the point where I’m getting lost on the usefulness of Docker for my usecase, our product is NOT meant to be working isolated and alone… It’s a collection of ros nodes to allow easier programming and deployment of industrial robotic cells. So it can be seen as library to be used by our developers and clients.
So If I am a user of this product, having a docker component would be great to start. But then I would develop my own robotic application/installation using this product + extra drivers form other Ros repo + my own nodes and application-specific Guis, my own config files and programs etc…
So, to my current understanding, I could “save” all this in my local version of the docker container… but when the official product docker container is updated, I would then loose all my specific configuration and application, right?
Or should I create a new docker container for my own developments ? and ask my clients to control Docker programming to be able to create their own application?
As you can see, I fully get the benefits of the docker container when the objective is to use something completely “closed” or ship an application that is just meant to be ran/executed.
But I dont’ get the “how-To” when I need to work on top of a third-party provided container… And maintain the integrity of my work…
Can someone fill out the blanks in my (mis)understanding?
Thanks a lot in advance!