Everyone loves the promise of containers.
More specifically: everyone loves the promise of a world where they can build an application on their laptop, and have that application run exactly the same way in every environment -- from their laptop all the way to production, and at every step in between.
That's still a holy grail, though. In the meantime, people seem to be looking for practical ways to get all of the advantages of containers -- consistency, lightweight environments, application segregation, and so on -- while still maintaining the flexibility required to work with the many environments that are not amenable to containerization.
Which may explain why so many people... wow, just a lot of people... seem to be talking about Ansible and containers together:
So why are people using Ansible with Docker and other container formats? A few reasons:
* Ansible playbooks are portable. If you build a container with a pure Dockerfile, it means that the only way you can reproduce that application is in a Docker container. If you build a container with an Ansible playbook, you can then reproduce a very similar environment in Vagrant, or in a cloud instance of your choice, or on bare metal.
* Ansible playbooks are composable. Ideally, containers should be as simple as possible, but as the complexity of a container grows, defining that container with a single Dockerfile can become complex and unwieldy. Ansible playbooks can be built up using roles, so that even complex playbooks are easily read, and different roles can be reused across many environments.
* Ansible can manage full environments. With Ansible, you can manage not only the containers, but the environments around the containers. Docker instances still need to run on hosts, and those hosts need to be launched, configured, networked, and coordinated.
* Ansible can model containers and non-containers at the same time. This is especially important, as containerized applications are nearly always talking to components -- storage, database, networking -- that are not containerized, and frequently not even containerizable.
* Ansible is a hedge against container format churn. There are many container formats. Docker is the clear leader, and there are many contenders: LXC, LXD, Rocket, Drawbridge, and more all the time. Building with portability in mind now means being protected from potential container wars in the future.
Don't take our word for it. There are plenty of people out in the real world who are not only using Ansible and Docker together, but also talking about why they've chosen this path, with hundreds of presentations on SlideShare to explore.
Ask around; a lot of people will be happy to tell you why Ansible is their preferred way to move towards a more containerized world.