I can’t help but feel comparing configuration management to infrastructure orchestration is very apples-to-oranges. I don’t think it makes sense in any decent sized operation to use strictly one of the other. Personally I’ve used Cloudformation and Ansible together, as I found Ansible’s ability to orchestrate infrastructure to be nothing short of extremely painful. However I can say the same is true for Cloudformation, provisioning and configuring hosts is nothing shy of nearly impossible for complex deployments in cloudformation. This said they actually complement each other extremely well. I see people mentioning ECS as another solution, and ECS does what it does pretty well in my experience, but it’s also not a cure-all and ECS isn’t the magic bullet to handled everything docker related. Really there is no magic bullet for operations. Really these things shouldn’t be compared in a head to head battle. If you measure a fish by its ability to climb a tree… I’m sure we’re familiar with that proverb.
What if you used Terraform to manage networking, cloud resources(like EC2 instances, EBS volumes, etc), and ansible to actually configure hosts? Or if you were deploying an application, you could create a docker image, manage the infrastructure with terraform and the machines would be essentially “configured” with a docker image.
The way I see is Docker is great at packaging applications, typically your own application that you are deploying. Terraform is great at managing hardware(compute, network, and storage infra). Ansible/Chef/Puppet are great at configuring software on the hosts. Why would I ever limit myself to one?