Saltar al contenido

Lección 1 de 20 · Lectura y práctica

Instalar Airflow Localmente con Docker

Concepto claveInstalar 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.

Del concepto a la práctica

Taller de esta lección

Docker permite fijar el entorno de Airflow y sus servicios auxiliares, pero la instalación solo es útil si los datos de trabajo sobreviven a la recreación de contenedores. La decisión esencial es separar código, logs y metadatos persistentes mediante volúmenes, y no publicar el puerto de administración más allá del entorno local.

Ejemplo resuelto

Para una prueba local, organiza dags/, logs/ y plugins/ como montajes del proyecto. PostgreSQL debe usar un volumen propio; así, detener los contenedores no elimina la información de ejecución. Comprueba la relación: un DAG nuevo aparece desde dags/, mientras que el historial permanece en la base de metadatos.

Pruébalo

  1. Crea las tres carpetas y coloca un DAG mínimo en dags/.

  2. Levanta el conjunto definido por el archivo Compose.

  3. Detén y vuelve a iniciar los servicios.

  4. Verifica que el DAG y su historial sigan disponibles.

Comprueba tu resultado

Error frecuente: borrar todos los contenedores esperando conservar el historial. Corrige usando volúmenes nombrados y confirma con una consulta o vista local que existe el mismo registro de ejecución antes y después del reinicio. El resultado esperado es un DAG visible y un historial no vacío tras la recreación.

Guía para la versión actual

Los ejemplos históricos de instalación usan Airflow 2. Para esta ampliación utiliza el archivo oficial de composición de Airflow 3.3.2 y Docker Compose v2, sin mezclarlo con imágenes de otra versión. El API server ofrece la interfaz y la API; el DAG processor procesa las definiciones; el scheduler planifica; la base de metadatos conserva estado. Celery añade workers y Redis, y las tareas diferidas necesitan triggerer. El inicio oficial realiza las migraciones antes de levantar el resto de servicios. Comprueba errores de importación por separado de salud de contenedores.

Conserva esta práctica en una carpeta propia y los volúmenes entre las dos ejecuciones. No borres volúmenes para resolver un error Python ni tomes el entorno de aprendizaje como una configuración productiva. Instalación oficial con Compose.

Grafo acíclico con extracción, validación, transformación, carga y publicación, incluyendo dos dependencias de entrada.
CursaloMapa de práctica
Dependencias antes que horarios

Un DAG expresa dependencias entre tareas, sin ciclos. Una transformación puede esperar a varias entradas y la publicación debe esperar a que la carga esté lista. El orden depende de los datos necesarios, no solo de una hora del reloj.

Ver la infografía en tamaño completo ↗

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:

  1. Descarga el archivo docker-compose.yaml desde la documentación oficial de Airflow
  2. Configura variables de entorno como AIRFLOW_UID para permisos
  3. Inicializa la base de datos con docker-compose up airflow-init
  4. Levanta todos los servicios con docker-compose up
  5. 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/airflow

Caso 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:

  1. Instala Docker y Docker Compose en tu sistema si no los tienes (usa los instaladores oficiales).
  2. Descarga el archivo docker-compose.yaml oficial de Airflow 2.5+ desde GitHub de Apache Airflow.
  3. Crea un directorio de proyecto con dos subdirectorios: dags y logs.
  4. Modifica el docker-compose.yaml para montar el directorio dags local en el contenedor de Airflow (busca la sección volumes).
  5. Ejecuta docker-compose up airflow-init para inicializar la base de datos.
  6. Levanta los servicios con docker-compose up -d y verifica que estén corriendo con docker-compose ps.
  7. Accede a la interfaz web en http://localhost:8080 (usuario: airflow, contraseña: airflow).
  8. Crea un archivo mi_primer_dag.py en el directorio dags con un DAG que tenga tres tareas: una tarea dummy "inicio", una PythonOperator que imprima "Transformando datos", y una dummy "fin".
  9. Verifica que el DAG aparezca en la interfaz web y actívalo.
  10. Ejecuta manualmente el DAG y revisa los logs para confirmar que las tareas se completaron exitosamente.
Pistas
  • 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.

Práctica acompañada: Aprender haciendo un proyecto

Una entrega pequeña, evidencia y retroalimentación. Usa este cuaderno como práctica complementaria de la ruta; el material original de la lección continúa siendo tu referencia.

Una entrega pequeña, evidencia y retroalimentación: Pregunta, Muestra, Entrega, Revisión
De la idea al resultado: una secuencia para practicar y revisar.

Práctica: una hora con tres etapas

Dedica diez minutos a definir la entrega y los criterios, treinta y cinco a construirla y quince a probarla. El tiempo es una guía del ejercicio, no una promesa de que cualquier tarea se resuelva en una hora. Si aparece una dependencia grande, redúcela o conviértela en un pendiente explícito.

Usa la hoja de proyecto para registrar entrada, resultado esperado y evidencia. Pide a alguien que intente usar la entrega sin tus instrucciones verbales. Observa qué pregunta primero. Una buena corrección puede ser una etiqueta, un ejemplo o una condición que antes no habías explicado.

Comprueba tu entrega

Entrega la primera versión, la versión revisada y una nota breve: qué funcionó, qué falló y qué probarías después. Conserva los archivos necesarios para repetir el ejercicio. Una captura demuestra apariencia; una consulta ejecutada o un archivo abierto demuestra otro tipo de resultado. Elige la evidencia adecuada.

Sigue con Apache Airflow para ETL: Integraciones y Pipelines en Tiempo Real

Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.

Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.