Introducción
En este módulo, exploraremos cómo Ansible puede integrarse con Docker para automatizar la gestión de contenedores. Docker es una plataforma que permite a los desarrolladores empaquetar aplicaciones en contenedores, que son entornos ligeros y portátiles. Ansible, por su parte, es una herramienta de automatización que puede gestionar configuraciones y despliegues de manera eficiente. Juntos, Ansible y Docker pueden simplificar y optimizar el flujo de trabajo de DevOps.
Objetivos del Módulo
- Comprender cómo Ansible puede interactuar con Docker.
- Aprender a usar módulos de Ansible específicos para Docker.
- Desplegar y gestionar contenedores Docker usando Ansible.
- Automatizar la construcción de imágenes Docker con Ansible.
Conceptos Clave
- Contenedores Docker: Entornos ligeros y portátiles que contienen todo lo necesario para ejecutar una aplicación.
- Imágenes Docker: Plantillas inmutables que se utilizan para crear contenedores Docker.
- Módulos de Ansible para Docker: Conjunto de módulos que permiten gestionar contenedores, imágenes, redes y volúmenes Docker.
Módulos de Ansible para Docker
Ansible proporciona varios módulos para interactuar con Docker. Algunos de los más utilizados son:
docker_container
: Gestiona contenedores Docker.docker_image
: Gestiona imágenes Docker.docker_network
: Gestiona redes Docker.docker_volume
: Gestiona volúmenes Docker.
Ejemplo Práctico: Desplegar un Contenedor Docker con Ansible
A continuación, veremos un ejemplo práctico de cómo usar Ansible para desplegar un contenedor Docker.
Paso 1: Instalación de Dependencias
Antes de comenzar, asegúrate de tener Docker y Ansible instalados en tu sistema. Puedes instalar Docker siguiendo las instrucciones en la documentación oficial de Docker. Para instalar Ansible, puedes usar el siguiente comando:
Paso 2: Crear un Playbook de Ansible
Crea un archivo llamado deploy_docker.yml
y añade el siguiente contenido:
--- - name: Desplegar un contenedor Docker hosts: localhost tasks: - name: Asegurarse de que Docker está instalado apt: name: docker.io state: present become: true - name: Iniciar el servicio Docker service: name: docker state: started enabled: true become: true - name: Desplegar un contenedor Nginx docker_container: name: nginx_container image: nginx:latest state: started ports: - "80:80"
Explicación del Playbook
- Instalar Docker: Utiliza el módulo
apt
para asegurarse de que Docker está instalado en el sistema. - Iniciar el servicio Docker: Utiliza el módulo
service
para iniciar y habilitar el servicio Docker. - Desplegar un contenedor Nginx: Utiliza el módulo
docker_container
para desplegar un contenedor Nginx y exponer el puerto 80.
Paso 3: Ejecutar el Playbook
Para ejecutar el playbook, usa el siguiente comando:
Este comando ejecutará el playbook y desplegará un contenedor Nginx en tu sistema.
Ejercicio Práctico
Ejercicio 1: Desplegar una Aplicación Web en un Contenedor Docker
Objetivo: Desplegar una aplicación web simple en un contenedor Docker usando Ansible.
-
Crear un Dockerfile: Crea un archivo llamado
Dockerfile
con el siguiente contenido:FROM python:3.8-slim WORKDIR /app COPY . /app RUN pip install flask CMD ["python", "app.py"]
-
Crear una Aplicación Flask: Crea un archivo llamado
app.py
con el siguiente contenido:from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' if __name__ == '__main__': app.run(host='0.0.0.0')
-
Crear un Playbook de Ansible: Crea un archivo llamado
deploy_flask_app.yml
con el siguiente contenido:--- - name: Desplegar una aplicación Flask en Docker hosts: localhost tasks: - name: Asegurarse de que Docker está instalado apt: name: docker.io state: present become: true - name: Iniciar el servicio Docker service: name: docker state: started enabled: true become: true - name: Construir la imagen Docker docker_image: name: flask_app build: path: . - name: Desplegar el contenedor Flask docker_container: name: flask_container image: flask_app:latest state: started ports: - "5000:5000"
-
Ejecutar el Playbook: Usa el siguiente comando para ejecutar el playbook:
ansible-playbook deploy_flask_app.yml --ask-become-pass
Solución del Ejercicio
El playbook deploy_flask_app.yml
realiza las siguientes acciones:
- Instalar Docker: Asegura que Docker está instalado en el sistema.
- Iniciar el servicio Docker: Inicia y habilita el servicio Docker.
- Construir la imagen Docker: Construye una imagen Docker a partir del Dockerfile.
- Desplegar el contenedor Flask: Despliega un contenedor Docker que ejecuta la aplicación Flask y expone el puerto 5000.
Conclusión
En este módulo, hemos aprendido cómo Ansible puede integrarse con Docker para automatizar la gestión de contenedores. Hemos visto cómo usar módulos de Ansible específicos para Docker y cómo desplegar y gestionar contenedores Docker usando Ansible. Además, hemos realizado un ejercicio práctico para desplegar una aplicación web en un contenedor Docker. Con estos conocimientos, estás preparado para integrar Ansible y Docker en tus flujos de trabajo de DevOps y automatizar la gestión de contenedores de manera eficiente.
Ansible: De Principiante a Avanzado
Módulo 1: Introducción a Ansible
Módulo 2: Conceptos Básicos de Ansible
Módulo 3: Playbooks
- Introducción a los Playbooks
- Escribiendo tu Primer Playbook
- Estructura del Playbook
- Variables y Hechos
- Condicionales y Bucles
Módulo 4: Roles
Módulo 5: Técnicas Avanzadas de Playbook
Módulo 6: Ansible Galaxy
Módulo 7: Ansible Tower
- Introducción a Ansible Tower
- Instalando Ansible Tower
- Usando Ansible Tower
- Gestionando Proyectos e Inventarios
Módulo 8: Ansible para DevOps
Módulo 9: Mejores Prácticas de Ansible
- Organización del Código
- Mejores Prácticas de Seguridad
- Ajuste de Rendimiento
- Pruebas de Código Ansible