Cómo automatizar el despliegue de aplicaciones con Ansible y Docker
Automatiza el despliegue de aplicaciones con Ansible y Docker usando playbooks, handlers y tags. Infraestructura como código repetible y predecible.
En el día a día de un equipo de infraestructura, uno de los desafíos más recurrentes es garantizar que el despliegue de aplicaciones sea repetible, predecible y rápido. Cuando combinamos Ansible con Docker, obtenemos una solución potente para orquestar la configuración del servidor y la ejecución de contenedores de manera automatizada. Este artículo explica cómo usar un playbook de Ansible para desplegar una aplicación Dockerizada, evitando pasos manuales y errores humanos.
1. Preparación del entorno con Ansible
Antes de escribir el playbook, es necesario definir el inventario y las variables. Ansible se conecta por SSH a los nodos objetivo, por lo que debemos asegurar conectividad y privilegios de sudo.
- Inventario: Archivo
hosts.inique agrupa los servidores de producción o staging. - Variables: En
group_vars/all.ymldefinimos parámetros como la versión de la imagen Docker, el puerto de exposición y las rutas de volúmenes.
Ejemplo de variable:
docker_image: "mi-app:latest"
app_port: 8080
2. Playbook para instalar Docker y desplegar el contenedor
El playbook principal consta de dos bloques: instalación de Docker (si no está presente) y despliegue del contenedor.
Instalación de Docker
Usamos el módulo ansible.builtin.apt para instalar los paquetes necesarios.
- name: Instalar Docker
apt:
name: docker.io
state: present
notify: iniciar docker
Despliegue del contenedor
Con el módulo community.docker.docker_container, definimos la imagen, puertos, volúmenes y políticas de reinicio.
- name: Desplegar contenedor de la aplicación
docker_container:
name: mi-app
image: "{{ docker_image }}"
state: started
restart_policy: always
ports:
- "{{ app_port }}:80"
volumes:
- /data/app:/app/data
3. Automatización del ciclo de vida con handlers y tags
Usamos handlers que reinician el contenedor solo cuando la imagen cambia. También aplicamos tags para ejecutar partes específicas del playbook.
- Handler: Reinicia el contenedor si se actualiza la imagen.
- Tags:
install,deploy,updatepermiten ejecutar solo la fase necesaria.
Ejemplo de handler:
handlers:
- name: reiniciar contenedor
docker_container:
name: mi-app
image: "{{ docker_image }}"
restart: yes
4. Ejecución y verificación del despliegue
Ejecutamos el playbook con el comando:
ansible-playbook -i hosts.ini deploy-app.yml --tags deploy
Ansible mostrará los cambios realizados. Para verificar, agregamos una tarea que consulte el estado del contenedor o la respuesta HTTP.
- name: Verificar que la app responde
uri:
url: "http://localhost:{{ app_port }}"
status_code: 200
Automatizar el despliegue de aplicaciones con Ansible y Docker reduce el tiempo de puesta en producción y elimina la variabilidad manual. Al tratar la infraestructura como código, cada despliegue es idéntico al anterior, facilitando la escalabilidad y el mantenimiento.
En Mister IT te ayudamos a implementar pipelines de infraestructura como código con Ansible y Docker. Conversemos sobre tu proyecto.