Talking in simple words Docker helps you to make your application portable and shippable. For making the migration of your infrastructure smooth the key-value prop of Docker make sure that your application is portable and migrate-able to any cloud and any infrastructure. If you deploy your application via Docker Containers for that matter Rocket and any other container formats, you insulate your application from the underlying infrastructure dependencies. The same application can seamlessly be deployed on any cloud. Running Docker containers on a VM often results in performance bottlenecks at the network/storage level. There are a set of tools - Kubernetes, Mesos, Docker Swarm - to embrace container ecosystem - to render container-native services. Days are not too far to see service providers rendering "Container As A Service" at the bare-metal performance. You could look at Joyent's Triton service. If you want to learn Docker then I would suggest you must take up the following Docker training course. You should also watch the following Docker video tutorial to clear all your doubts regarding docker.