Install Docker
Install Docker Desktop or Docker Engine with Compose V2. Allocate at least 4 GB RAM.
DATA ENGINEERING · WORKFLOW ORCHESTRATION
Apache Airflow turns a workflow into a directed acyclic graph: each task has an observable state, dependencies decide what may run next, and the scheduler coordinates execution without hiding the evidence.
warin/Airflow2026INTERACTIVE DAG SIMULATOR
This browser simulation does not run Airflow. It isolates the dependency logic before students open the real UI in Docker.
REAL AIRFLOW · DOCKER COMPOSE
The package contains Compose, PostgreSQL, LocalExecutor, two Airflow 3 DAGs, start/stop scripts and a bilingual-ready teaching README.
Install Docker Desktop or Docker Engine with Compose V2. Allocate at least 4 GB RAM.
docker compose up airflow-initWait until the initialization container exits with code 0.
docker compose up -dhttp://localhost:8080 · airflow / airflow
Trigger teaching_etl; inspect Graph, Grid, task logs, retries and XCom values.
SYSTEM ARCHITECTURE
Parses Python files and serializes workflow structure. A syntax error can prevent a DAG from appearing.
Evaluates dependencies and state, then submits eligible task instances to the executor.
Runs multiple task processes on one host—appropriate for this teaching package, not a distributed cluster.
Stores DAG runs, task states, schedules, connections and XCom metadata—the evidence behind the UI.
Serves the web interface and API on port 8080. Do not expose the classroom credentials publicly.
Efficiently waits for deferrable work without occupying a worker slot.
MANUAL DAILY INGESTION · OPEN-METEO → POSTGRESQL
Trigger the DAG manually, set data_date, and observe Extract → Validate → Load. An UPSERT makes rerunning the same date safe.
@dag(
dag_id="daily_weather_to_postgres",
schedule=None, # manual trigger only
params={"data_date": Param("2026-08-01", format="date")},
)
def daily_weather_to_postgres():
row = validate(extract()) # download one day from Open-Meteo
load(row) # UPSERT into teaching_daily_weatherAIRFLOW 3 · TASKFLOW API
Return values become XCom references; calling a decorated function defines a task instead of immediately executing ordinary Python.
from airflow.sdk import dag, task
@dag(schedule=None, start_date=..., catchup=False)
def teaching_etl():
@task
def extract() -> list[dict]: ...
@task
def summarize(rows: list[dict]) -> dict: ...
rows = extract()
summarize(rows) # XComArg wires the dependency
teaching_etl()TEACHING SEQUENCE
Predict the next runnable task before pressing Step.
Change data and inspect the XCom lineage.
Force one failure and explain retries.
Change the branch score and identify skipped tasks.
Add a cron schedule and explain logical date versus wall-clock time.
Diagnose a missing DAG using parser errors and container logs.
The included credentials and secret are intentionally simple. Keep the service on localhost. Production Airflow needs proper secrets, TLS, authentication, backups, monitoring and an intentionally designed executor/deployment model.