Why use these tools?
So far, we have been looking at tools that either use the main Docker client or use the tools that are provided by Docker and other third parties to support the main Docker client.
For quite a while, the functionality that some of these tools have now did not exist within a Docker support product. For example, if you wanted to launch a Docker host, you couldn't just use Docker Machine, instead you had to use something such as Vagrant to launch a virtual machine (locally or in the cloud) and then install Docker using a bash script, Puppet, or Ansible.
Once you had your Docker host up and running, you could use these tools to place your containers on hosts as there was no Docker Swarm or Docker Compose (remember Docker Compose started off as a third-party tool called Fig).
So while Docker has slowly been releasing their own tooling, some of these third-party options are actually more mature and have quite an active community behind them.
Let's start by looking at Puppet.