Ansible and Docker are popular tools for organizations looking to accelerate software releases via automation. While these tools couldn't be more different, they can work well together -- each accomplishing a different, important task for deploying and running software.
Docker enables you to run an application in a maintainable and repeatable manner. An admin can write a Dockerfile that stores all an application's commands and then build a Docker image and run it on most systems.
With Ansible's automation capabilities, admins can easily provision and configure servers. Ansible is developed in Python and can run on most machines to install updates to dependencies, configure software or orchestrate running applications.
Let's explore Ansible and Docker to see how these tools differ and how they can work together.
How Docker and Dockerfiles work
Supported by all cloud providers, Docker is often the path of least resistance for the deployment of an application to the cloud. Advantages include the ability to quickly get new containers up and running, the portability of a Docker image and the benefits of turning an application's environment configuration into a Dockerfile.
A Docker container doesn't load an OS, which means it can start running in seconds. Applications can scale quickly as well -- simply spin up more containers using Docker deployment tools, such as AWS Fargate, Google Cloud Run or Azure Container Instances. It's also possible to switch an app between cloud providers or even host the app on premises because Docker containers are easy to configure in cloud-hosted and local environments.
If you work with a Docker image, then your application's deployment is contained in a Dockerfile. A Dockerfile is written with commands to configure the application's running environment within the Docker container. Examples of simple commands in the Dockerfile include the COPY command and ENTRYPOINT command. The COPY command copies the application's executable file into the Docker container, while the ENTRYPOINT command runs the executable as the container's main process.
Since these configurations are captured in code, they can be kept in a version control repository. GitHub, for example, maintains a history of all the changes to the application's Dockerfile. This enables developers to collaboratively maintain the application's running environment.
Enabling developers to create and maintain their application's running environment is critical to a team's DevOps efforts, which aim to break down the barrier between writing application code and running and operating an application.
Running Ansible playbooks
Ansible automates processes, which can help organizations improve a wide range of efficiencies. For IT tasks, such as the management of developer machines, Ansible makes it possible to create and maintain the setup of a developer's machine in code.
To do this, Ansible uses playbooks, which contain plays. A play is the basic unit of Ansible execution and contains variables, roles and an ordered list of tasks that can repeatedly be run. For example, a play can contain the necessary steps to install and configure a custom Secure Sockets Layer/Transport Layer Security certification and be executable on any machine Secure Socket Shell can access.
A playbook could also provision a server to run an application. The benefits of using Ansible, much like Docker, are that containing these configurations in code provides a working history of changes.
When to use Ansible and Docker together
It's possible to use Ansible with Docker to manage more infrastructure. Docker containers offer a way to efficiently build an application, but they require a service to handle their configuration, deployment and orchestration. Ansible is useful for this -- an Ansible playbook can install and configure Docker on the host machine, install a Docker image and run that image as a service.
Cost and customization are the advantages of controlling an application's Docker runtime setup and configuration. Other container tools, such as Fargate, are more costly than running a basic server on premises. When you create your own Ansible playbooks, you also get fuller configurability.
Ansible has a huge advantage over provisioning machines by hand for organizations that don't run applications in the cloud. Using cloud-based tools, such as Fargate, can be compelling, but Ansible and Docker can provide a company with complete control of the server on which their application runs.