Many a people who are into Dev-Ops may think why comparing Docker which is a container technology with configuration management tools like Puppet. Why we included docker is that it serves the same purpose as configuration management tools like Puppet, Ansible and Chef ie deployment of configuration changes. Docker will do this deployment in a bit different way.
Before comparing the above three listed technologies, we are going to let you know about the basic similarity they have and the purpose they are used and designed for. All of these take the configuration of an environment as their input, work on them and produce their source code as an output, which is the core use of them all. The code being used and produced by these technologies can be managed by git or other platforms which help us to assemble and merge the code in a more flexible way.

Now after briefing you about the core purpose, We are going to tell you about their differences by making a comparison on all of them. Listed below are some core differences among all of them:

Puppet

Ansible

Docker

This technology seems more appealing to task and operations which do not need any development background. This technology is suitable for front-end developers where programming may be used a little somehow. Docker is known as a “Container technology”.
It is a complex technology from the development perspective. This is the simplest technology known for configuration management purposes. The code made by it is packaged into different unit’s of work so that it can be easily understood.
Though it’s a complex technology, scaling past can cause trouble when using puppet master which a server designed track the states of your infrastructure. Ansible does not face such issue for it being relatively simple. Docker does not undergo any scaling past issues.
It is written in non-domain language named Ruby. It is written in Python. Docker is written in a comparatively new language named Go.
Puppet may face issues when the environment is incompatible and it may not work the same way as it does in a compatible environment. Ansible is simpler and it is less regarded to face any issues. Docker guarantees for it to run in the same way irrespective of the environment in which it is being run.
Puppet is not known for being designed according to certain distribution standards. This technology does not follow any distribution standards. Docker containers are based on standards allowing containers to run on all major Linux/Unix distributions and Windows
Being difficult to pick, puppet is not best for starters. It is the best technology to start with if you are going to do configuration management for the first time. Docker is best to pick if you want to keep the thing manageable, understandable and isolated from being mixed as it produces different containers of code.
Puppet may configure more files at a time making it’s dependencies far complex. Ansible is same in producing file as puppet. Docker file is far better simpler than bash script for configuring a process with it’s dependencies because it expresses the configuration for a single process at a time.

Please list your differences which you feel are not here.