Concepto clave
Instalar Apache Airflow con Docker es como montar una fábrica de producción automatizada dentro de un contenedor estandarizado. En lugar de construir manualmente cada máquina con todas sus dependencias, Docker te permite empaquetar Airflow con todo lo necesario (Python, bibliotecas, configuraciones) en una imagen reproducible que puedes ejecutar en cualquier sistema. Esto elimina los problemas de "funciona en mi máquina" y garantiza consistencia entre entornos de desarrollo, prueba y producción.
La analogía del mundo real sería comparar construir una cocina desde cero (instalación manual) versus recibir una cocina modular prefabricada con todos los electrodomésticos ya instalados y configurados (Docker). Con Docker Compose, puedes orquestar múltiples servicios como la base de datos (PostgreSQL), el broker de mensajes (Redis para Celery), y el propio Airflow, todos comunicándose entre sí como piezas de una línea de ensamblaje.
Cómo funciona en la práctica
La instalación con Docker sigue un flujo estructurado. Primero, necesitas Docker y Docker Compose instalados en tu sistema. Luego, descargas el archivo docker-compose.yaml oficial de Airflow, que define todos los servicios necesarios. Este archivo actúa como el plano de tu fábrica de datos, especificando cómo se conectan los diferentes componentes.
Paso a paso:
- Descarga el archivo docker-compose.yaml desde la documentación oficial de Airflow
- Configura variables de entorno como
AIRFLOW_UIDpara permisos - Inicializa la base de datos con
docker-compose up airflow-init - Levanta todos los servicios con
docker-compose up - Accede a la interfaz web en
localhost:8080
Un ejemplo de configuración básica en el docker-compose.yaml:
version: '3'
services:
postgres:
image: postgres:13
environment:
POSTGRES_USER: airflow
POSTGRES_PASSWORD: airflow
POSTGRES_DB: airflow
airflow-webserver:
image: apache/airflow:2.5.1
depends_on:
- postgres
environment:
AIRFLOW__CORE__EXECUTOR: LocalExecutor
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflowCaso de estudio
Imagina que eres Data Engineer en una empresa de e-commerce que necesita procesar datos de ventas diarias. Tu pipeline ETL debe extraer datos de una base de datos MySQL, transformarlos para calcular métricas como ingresos por categoría, y cargarlos en un data warehouse (BigQuery). Con Airflow en Docker, puedes crear un entorno reproducible donde:
- El DAG se ejecuta cada día a las 2 AM
- Los operadores PythonExtraer y PythonTransformar se comunican a través de XCom
- La conexión a BigQuery se gestiona mediante Airflow Connections
La ventaja clave es que todo el entorno (Airflow + dependencias de Python para MySQL y BigQuery) está contenido en Docker. Si otro ingeniero necesita replicar el pipeline, solo necesita el mismo docker-compose.yaml y los DAGs, sin preocuparse por versiones de Python o conflictos de bibliotecas.
Docker permite empaquetar no solo Airflow, sino también todas las dependencias específicas de tu pipeline, como bibliotecas para APIs o conectores de bases de datos.
Errores comunes
1. Permisos incorrectos en volúmenes Docker: Al montar directorios locales para DAGs o logs, los permisos entre el host y el contenedor pueden causar errores. Solución: Configurar correctamente AIRFLOW_UID y usar chown si es necesario.
2. Memoria insuficiente para contenedores: Airflow con múltiples ejecutores puede consumir mucha RAM, causando caídas. Solución: Ajustar límites de memoria en docker-compose.yaml y monitorear con docker stats.
3. Versiones incompatibles entre imágenes: Usar versiones diferentes de Airflow, PostgreSQL o Redis puede romper la comunicación. Solución: Usar las versiones recomendadas en la documentación oficial y probar en entorno de desarrollo primero.
4. No configurar persistencia de datos: Si la base de datos PostgreSQL no tiene volúmenes persistentes, perderás todos los metadatos de Airflow al reiniciar. Solución: Definir volúmenes Docker para PostgreSQL y para logs/DAGs.
5. Exponer puertos incorrectamente en producción: Dejar el puerto 8080 abierto al público sin autenticación. Solución: Usar reverse proxy como Nginx con SSL y autenticación, o desplegar en red privada.
Checklist de dominio
- Puedo descargar y configurar docker-compose.yaml para Airflow 2.x
- Entiendo cómo modificar el archivo para cambiar el executor (LocalExecutor vs CeleryExecutor)
- Sé cómo montar un directorio local de DAGs en el contenedor de Airflow
- Puedo acceder a la interfaz web y crear una conexión a una base de datos externa
- Comprendo cómo escalar workers con CeleryExecutor en Docker
- Sé cómo hacer backup de la base de datos PostgreSQL de Airflow
- Puedo diagnosticar y resolver problemas comunes de permisos en volúmenes Docker
Configurar un entorno Airflow con Docker para un pipeline ETL básico
En este ejercicio práctico, configurarás un entorno Airflow completo usando Docker y crearás un DAG simple que simule un pipeline ETL. Sigue estos pasos:
- Instala Docker y Docker Compose en tu sistema si no los tienes (usa los instaladores oficiales).
- Descarga el archivo
docker-compose.yamloficial de Airflow 2.5+ desde GitHub de Apache Airflow. - Crea un directorio de proyecto con dos subdirectorios:
dagsylogs. - Modifica el docker-compose.yaml para montar el directorio
dagslocal en el contenedor de Airflow (busca la sección volumes). - Ejecuta
docker-compose up airflow-initpara inicializar la base de datos. - Levanta los servicios con
docker-compose up -dy verifica que estén corriendo condocker-compose ps. - Accede a la interfaz web en
http://localhost:8080(usuario: airflow, contraseña: airflow). - Crea un archivo
mi_primer_dag.pyen el directorio dags con un DAG que tenga tres tareas: una tarea dummy "inicio", una PythonOperator que imprima "Transformando datos", y una dummy "fin". - Verifica que el DAG aparezca en la interfaz web y actívalo.
- Ejecuta manualmente el DAG y revisa los logs para confirmar que las tareas se completaron exitosamente.
- Si tienes problemas de permisos al montar el directorio dags, revisa la variable AIRFLOW_UID en el docker-compose.yaml.
- Para ver logs específicos de un contenedor, usa docker-compose logs nombre_servicio (ej: docker-compose logs airflow-webserver).
- Si el DAG no aparece en la interfaz, verifica que el archivo .py esté en el directorio montado y que no tenga errores de sintaxis.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.