Concepto clave
Instalar Apache Airflow con Docker es como montar una fábrica de procesamiento de datos en un contenedor estandarizado. En lugar de construir manualmente cada máquina con todas las dependencias, Docker te permite empaquetar Airflow y todo su entorno en una imagen reproducible que funciona igual en cualquier sistema. Esto elimina el famoso "problema del funciona en mi máquina" que tanto afecta a los ingenieros de datos.
La analogía perfecta es compararlo con un kit de muebles prefabricados: en lugar de cortar, lijar y ensamblar cada pieza desde cero (instalación manual con pip y configuraciones complejas), recibes un paquete completo con todas las piezas pre-cortadas y las instrucciones exactas para montarlo rápidamente. Docker Compose actúa como el manual de instrucciones que orquesta múltiples contenedores (Airflow, base de datos, redis) para trabajar juntos armoniosamente.
Cómo funciona en la práctica
La instalación con Docker sigue un flujo estructurado que garantiza consistencia. Primero, descargas el archivo docker-compose.yaml oficial de Apache Airflow, que define todos los servicios necesarios. Este archivo es la receta que Docker Compose seguirá para crear y conectar los contenedores.
Pasos esenciales:
- Crear directorios para logs, DAGs y plugins con permisos adecuados
- Descargar y personalizar el archivo docker-compose.yaml según necesidades
- Inicializar la base de datos con
docker-compose up airflow-init - Levantar todos los servicios con
docker-compose up - Acceder a la interfaz web en
localhost:8080(usuario: airflow, contraseña: airflow)
Un ejemplo de estructura de directorios:
airflow-docker/ ├── dags/ ├── logs/ ├── plugins/ └── docker-compose.yaml
Caso de estudio
Imagina que trabajas en una fintech que necesita procesar transacciones bancarias diarias. Tu equipo tiene 3 ingenieros con diferentes sistemas operativos (Windows, macOS, Linux) y necesitan desarrollar pipelines ETL idénticos. En lugar de dedicar días a configurar entornos manualmente, implementas Airflow con Docker.
La solución:
| Componente | Configuración | Propósito |
|---|---|---|
| Airflow Scheduler | 2 CPUs, 4GB RAM | Orquestar ejecución de DAGs |
| PostgreSQL | Volumen persistente | Almacenar metadatos y estado |
| Redis | Cache temporal | Gestionar colas de ejecución |
| Worker | Escalable horizontalmente | Ejecutar tareas en paralelo |
Resultado: Los 3 ingenieros tienen el mismo entorno funcionando en 30 minutos, colaborando en los mismos DAGs sin diferencias de configuración.
Errores comunes
1. Permisos incorrectos en volúmenes: Docker corre como root dentro del contenedor pero mapea volúmenes al usuario host. Si los directorios dags/, logs/ o plugins/ tienen permisos restrictivos, Airflow no podrá escribir en ellos. Solución: Asegurar que el usuario host tenga permisos de escritura o usar chmod apropiadamente.
2. Conflicto de puertos: El puerto 8080 (interfaz web) o 5432 (PostgreSQL) pueden estar ocupados por otras aplicaciones. Solución: Modificar los puertos en el archivo docker-compose.yaml o detener los servicios conflictivos.
3. Falta de recursos del sistema: Airflow consume recursos significativos, especialmente con múltiples DAGs. Si Docker asigna muy poca memoria, los contenedores fallarán silenciosamente. Solución: Ajustar límites de recursos en Docker Desktop o aumentar la memoria disponible.
4. No inicializar la base de datos: Olvidar ejecutar docker-compose up airflow-init antes del primer inicio resultará en errores de conexión a la base de datos. Solución: Seguir estrictamente el orden de inicialización.
5. Versiones incompatibles: Usar versiones antiguas del archivo docker-compose.yaml con nuevas versiones de Docker puede causar errores de sintaxis. Solución: Siempre descargar la versión más reciente desde la documentación oficial.
Checklist de dominio
- ✓ Puedo explicar la diferencia entre instalar Airflow con Docker vs instalación manual
- ✓ He configurado correctamente los volúmenes para persistencia de datos
- ✓ Sé cómo escalar workers modificando docker-compose.yaml
- ✓ Puedo acceder a la interfaz web y verificar que todos los servicios están activos
- ✓ Entiendo cómo agregar dependencias Python personalizadas a la imagen
- ✓ Sé cómo hacer backup y restore de la base de datos de metadatos
- ✓ Puedo diagnosticar y resolver los 3 errores más comunes de permisos y puertos
Configurar un entorno Airflow con Docker para procesamiento de datos de ventas
En este ejercicio práctico, configurarás un entorno completo de Apache Airflow usando Docker para simular un caso real de procesamiento de datos de ventas.
- Preparación del entorno:
- Crea un directorio llamado
airflow-ventasy dentro, subdirectorios paradags,logs,pluginsyconfig - Descarga el archivo
docker-compose.yamloficial de Airflow 2.7+ desde GitHub - Modifica el archivo para cambiar el puerto de la interfaz web a 8081 (evitar conflictos)
- Crea un directorio llamado
- Configuración personalizada:
- En el archivo docker-compose.yaml, agrega una variable de entorno
AIRFLOW__CORE__DEFAULT_TIMEZONE: 'America/Mexico_City' - Configura el servicio de PostgreSQL para usar un volumen persistente llamado
airflow-postgres-data - Ajusta los recursos: asigna 2GB de RAM al scheduler y 1GB a cada worker
- En el archivo docker-compose.yaml, agrega una variable de entorno
- Inicialización y prueba:
- Ejecuta
docker-compose up airflow-inity verifica que termine exitosamente - Levanta todos los servicios con
docker-compose up -d - Accede a
localhost:8081e inicia sesión con las credenciales por defecto - Crea un DAG de prueba llamado
ventas_diariasen el directorio dags/
- Ejecuta
- Verificación final:
- Confirma que todos los servicios (scheduler, webserver, worker, postgres, redis) estén en estado "healthy"
- Verifica que el DAG aparezca en la interfaz web y pueda activarse
- Revisa los logs para asegurar que no hay errores de permisos o conexión
- Recuerda que los directorios dags/, logs/ y plugins/ deben tener permisos de escritura para el usuario que ejecuta Docker
- Si la interfaz web no carga, verifica que el puerto 8081 no esté siendo usado por otra aplicación con 'netstat -an | grep 8081'
- Para ver los logs de un servicio específico, usa 'docker-compose logs [nombre-servicio]' como 'docker-compose logs scheduler'
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.