Concepto clave
La instalación de Apache Airflow con Docker para desarrollo local es una estrategia que permite crear un entorno aislado y reproducible donde puedes diseñar, probar y depurar tus DAGs (Directed Acyclic Graphs) sin afectar sistemas de producción. Imagina que Docker es como una caja de herramientas portátil: dentro tienes todo lo necesario (Airflow, sus dependencias, bases de datos) empaquetado en contenedores, listo para usar en cualquier máquina. Esto elimina problemas de compatibilidad entre sistemas operativos y versiones de software, similar a cómo un chef lleva sus utensilios a una cocina ajena para garantizar resultados consistentes.
Para un Data Engineer intermedio, esta aproximación es crucial porque acelera el ciclo de desarrollo. En lugar de perder horas configurando manualmente Airflow y sus componentes (como el metadatabase o el executor), Docker te ofrece una solución preconfigurada. Los contenedores actúan como máquinas virtuales ligeras: cada uno ejecuta un servicio específico (por ejemplo, Airflow webserver, scheduler, base de datos PostgreSQL) y se comunican entre sí a través de una red virtual. Esto simula un entorno de producción en miniatura, permitiéndote validar pipelines ETL complejos antes de desplegarlos.
Cómo funciona en la práctica
El proceso sigue estos pasos:
- Preparación del entorno: Instala Docker y Docker Compose en tu máquina local. Estos son los únicos requisitos previos, ya que todo lo demás se gestiona dentro de contenedores.
- Descarga de la configuración oficial: Airflow proporciona un archivo
docker-compose.yamloficial que define todos los servicios necesarios. Este archivo es como un plano de construcción que especifica qué contenedores crear, cómo configurarlos y cómo conectarlos. - Personalización: Ajusta el archivo
docker-compose.yamlsegún tus necesidades. Por ejemplo, puedes cambiar la versión de Airflow, agregar variables de entorno para conexiones a bases de datos externas, o montar volúmenes para persistir datos. - Inicialización: Ejecuta comandos Docker Compose para iniciar los servicios. Esto descarga las imágenes de Docker (si no las tienes) y levanta los contenedores. Una vez completado, accedes a la interfaz web de Airflow en
http://localhost:8080.
Un ejemplo básico de configuración en el archivo docker-compose.yaml incluye servicios como:
| Servicio | Función |
|---|---|
| postgres | Base de datos para metadatos de Airflow |
| redis | Broker de mensajes para el executor Celery |
| airflow-webserver | Interfaz web para gestionar DAGs |
| airflow-scheduler | Orquesta la ejecución de tareas |
| airflow-worker | Ejecuta tareas en paralelo (si usas Celery) |
Caso de estudio
Supongamos que eres un Data Engineer en una empresa de e-commerce que necesita orquestar un pipeline ETL diario. El pipeline extrae datos de ventas de una API, los transforma para calcular métricas como ingresos por región, y los carga en un data warehouse. Con Airflow en Docker, puedes simular este flujo localmente:
- Configuración inicial: Descargas el archivo
docker-compose.yamloficial de Airflow y lo modificas para usar la versión 2.7.0 (estable). Agregas un volumen para mapear una carpeta local donde guardarás tus DAGs, asegurando que los cambios en código se reflejen automáticamente en Airflow. - Desarrollo del DAG: Creas un DAG en Python que define tareas para extraer datos (usando un operador Python), transformarlos (con Pandas en un operador personalizado) y cargarlos (con un operador para PostgreSQL). Lo guardas en la carpeta mapeada, y Airflow lo detecta al instante.
- Pruebas: En la interfaz web, activas el DAG y monitoreas su ejecución. Usas los logs de los contenedores para depurar errores, como problemas de conexión a la API. Esto te permite iterar rápidamente sin riesgos para producción.
Dato importante: Según la documentación de Airflow, la configuración con Docker reduce el tiempo de setup de horas a minutos, ideal para entornos de desarrollo ágiles.
Errores comunes
- Permisos incorrectos en volúmenes: Al mapear carpetas locales a contenedores, los permisos de archivos pueden causar que Airflow no lea los DAGs. Solución: Asegúrate de que los archivos tengan permisos de lectura para el usuario dentro del contenedor (por defecto, usuario
airflowcon UID 50000). - Conflicto de puertos: Si otro servicio usa el puerto 8080 en tu máquina, el webserver de Airflow fallará al iniciar. Solución: Cambia el mapeo de puertos en
docker-compose.yaml, por ejemplo, de8080:8080a8081:8080para acceder enhttp://localhost:8081. - Falta de recursos del sistema: Docker puede consumir mucha RAM y CPU, especialmente con múltiples contenedores. Solución: Ajusta los límites en la configuración de Docker Desktop o usa comandos como
docker-compose up --scale airflow-worker=2para controlar el número de workers. - Olvidar inicializar la base de datos: Antes de usar Airflow por primera vez, debes ejecutar
docker-compose up airflow-initpara configurar la base de datos. Si lo omites, los servicios no funcionarán correctamente. - No gestionar variables y conexiones: En desarrollo, es común hardcodear credenciales en DAGs, lo que es inseguro. Solución: Usa la interfaz web o comandos de Airflow para definir variables y conexiones de forma segura desde el inicio.
Checklist de dominio
- Verifica que Docker y Docker Compose estén instalados y funcionando en tu sistema operativo.
- Descarga y personaliza el archivo
docker-compose.yamloficial de Airflow para tu versión deseada. - Ejecuta el comando de inicialización para configurar la base de datos de metadatos.
- Inicia todos los servicios con Docker Compose y accede a la interfaz web en el puerto configurado.
- Crea un DAG simple, guárdalo en la carpeta mapeada, y confirma que Airflow lo detecte automáticamente.
- Configura al menos una conexión (por ejemplo, a PostgreSQL) y una variable en Airflow para usarlas en un DAG.
- Monitorea los logs de los contenedores para depurar un error simulado en una tarea.
Configura un entorno local de Airflow con Docker y despliega tu primer DAG ETL
Sigue estos pasos para instalar Airflow con Docker y probar un pipeline básico:
- Prepara tu máquina: Si no tienes Docker instalado, descárgalo desde docker.com. Asegúrate de que Docker Compose esté incluido (viene con Docker Desktop en Windows/Mac, o instálalo por separado en Linux).
- Obtén la configuración de Airflow: Descarga el archivo
docker-compose.yamloficial desde la documentación de Airflow (versión 2.7.0). Guárdalo en una carpeta nueva, por ejemplo,~/airflow-docker. - Personaliza la configuración: Abre el archivo
docker-compose.yamly realiza estos cambios:- Cambia la versión de la imagen de Airflow a
apache/airflow:2.7.0. - Agrega un volumen para mapear una carpeta local (por ejemplo,
./dags) al directorio de DAGs en el contenedor (/opt/airflow/dags). - Modifica el puerto del webserver si el 8080 está en uso (por ejemplo, usa
8081:8080).
- Cambia la versión de la imagen de Airflow a
- Inicializa Airflow: En la terminal, navega a la carpeta con el archivo
docker-compose.yamly ejecuta:
Espera a que complete, lo que configurará la base de datos.docker-compose up airflow-init - Inicia los servicios: Ejecuta:
Esto levantará todos los contenedores en segundo plano. Verifica que estén corriendo condocker-compose up -ddocker-compose ps. - Accede y prueba: Abre tu navegador en
http://localhost:8080(o el puerto que configuraste). Usa las credenciales por defecto (usuario:airflow, contraseña:airflow). Crea un DAG simple en la carpeta mapeada (por ejemplo, un DAG que imprima "Hola Mundo" cada minuto) y confirma que aparezca en la interfaz. - Ejecuta un pipeline ETL simulado: Desarrolla un DAG con tres tareas:
- Extraer: Usa un operador Python para generar datos ficticios de ventas (por ejemplo, una lista de diccionarios con producto, cantidad y precio).
- Transformar: En otra tarea, calcula el ingreso total (cantidad * precio) y filtra productos con ingreso mayor a 100.
- Cargar: Usa un operador para guardar los resultados en un archivo CSV local.
- Si el webserver no carga, revisa los logs con 'docker-compose logs airflow-webserver' para ver errores específicos.
- Para acceder a la terminal de un contenedor y depurar, usa 'docker exec -it [nombre-contenedor] bash'.
- Asegúrate de que tu DAG tenga un 'dag_id' único y esté en la carpeta correcta mapeada; Airflow escanea cada 30 segundos.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.