It is hell when different applications are dependent on different Opertating Systems and different library versions. Setting up these environments to be compatible with each and every application is very difficult. Docker uses "containers" to make it easy to deploy applications and setup environments. The goal of containers is for them to be immutable, meaning if there are changes required then a new container must be created. This immutable infrastructure gives us consistency and reliability. Containers are similar to virtual machines in the idea that you deploy your applications to them, but there are some key differences and benefits of using Docker.

Check out these links for more info:

My Docker Samples