Even small pieces of software do bring a huge amount of dependencies if you regard all layers down to the system kernel. Not always the package manager can handle the dependencies if several versions are conflicting.
With docker, all applications can be packaged and shipped in containers, isolating them from each other and the system.
The old issue of running something in different versions on the same system without further issues on updates is vastly simplified with docker: pull the new image, restart the container by using the new image as basis.