Apache Airflow es una potente plataforma para gestionar flujos de trabajo, permitiendo programar y monitorear pipelines de datos. Sin embargo, su configuración puede ser algo compleja. Aquí es donde Docker se convierte en una solución ideal 🚀. Con Docker, puedes empaquetar todo el entorno de Airflow, incluyendo dependencias y configuraciones, en contenedores que pueden ser desplegados en cualquier lugar.
En este artículo, configuraremos Apache Airflow en Docker 🐳, asegurando la persistencia de datos y añadiendo soporte para JDBC, lo que permitirá conectar Airflow con diversas bases de datos.
⚙️ Requisitos previos
Antes de comenzar, asegúrate de tener instalados los siguientes componentes:
🗂️ Crear estructura de ficheros
Primero, crearemos una carpeta para almacenar el proyecto y dentro de esta, la estructura de ficheros necesaria:
mkdir airflow_docker && cd airflow_docker && mkdir plugins dags logs drivers
📄 Crear el Dockerfile
Dentro de la carpeta airflow_docker, crea un archivo llamado Dockerfile:
FROM apache/airflow:2.7.0
# Instala el proveedor JDBC
RUN pip install apache-airflow-providers-jdbc
# Actualiza el proveedor OpenLineage a una versión compatible
RUN pip install --upgrade apache-airflow-providers-openlineage
# (Opcional) Si necesitas copiar controladores específicos
COPY drivers /opt/airflow/drivers
🛠️ Generar el docker-compose
A continuación, crea el archivo docker-compose.yml en la misma carpeta:
version: '3'
services:
postgres:
image: postgres:15
environment:
POSTGRES_USER: airflow
POSTGRES_PASSWORD: airflow
POSTGRES_DB: airflow
volumes:
- postgres_data:/var/lib/postgresql/data
airflow-init:
build:
context: .
dockerfile: Dockerfile
depends_on:
- postgres
environment:
AIRFLOW__CORE__EXECUTOR: LocalExecutor
AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
AIRFLOW__CORE__FERNET_KEY: (FERNET KEY)
AIRFLOW__CORE__LOAD_EXAMPLES: 'true'
volumes:
- ./dags:/opt/airflow/dags
- ./logs:/opt/airflow/logs
- ./plugins:/opt/airflow/plugins
- ./airflow:/opt/airflow
entrypoint: >
bash -c "
airflow db upgrade &&
airflow users create --username admin --password admin --firstname Admin --lastname User --role Admin --email [email protected]
"
restart: no
webserver:
build:
context: .
dockerfile: Dockerfile
depends_on:
- postgres
- airflow-init
ports:
- "8080:8080"
environment:
AIRFLOW__CORE__EXECUTOR: LocalExecutor
AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
AIRFLOW__CORE__FERNET_KEY: (FERNET KEY)
volumes:
- ./dags:/opt/airflow/dags
- ./logs:/opt/airflow/logs
- ./plugins:/opt/airflow/plugins
- ./airflow:/opt/airflow
command: ["webserver"]
scheduler:
build:
context: .
dockerfile: Dockerfile
depends_on:
- postgres
- airflow-init
environment:
AIRFLOW__CORE__EXECUTOR: LocalExecutor
AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
AIRFLOW__CORE__FERNET_KEY: (FERNET KEY)
volumes:
- ./dags:/opt/airflow/dags
- ./logs:/opt/airflow/logs
- ./plugins:/opt/airflow/plugins
- ./airflow:/opt/airflow
command: ["scheduler"]
volumes:
postgres_data:
💡 Tip: Sustituye (FERNET KEY)
por una clave generada para mayor seguridad.
🏗️ Levantar Airflow
Para iniciar Airflow y sus servicios asociados (webserver, scheduler y base de datos), ejecuta el siguiente comando:
docker-compose up -d
Esto levantará todos los servicios necesarios, y deberías poder acceder a la interfaz de Airflow en http://localhost:8080 con el usuario admin y la contraseña admin.