Installer Apache Airflow avec Docker Compose

@joekakone

Joseph Konka @joekakone

03/03/2026 · 10 min

Déployez un environnement complet et reproductible d'Apache Airflow avec Docker Compose : conteneurs, persistance des volumes, initialisation et extension d'image.

Installer Apache Airflow directement sur votre système d'exploitation avec pip peut rapidement devenir fastidieux en raison des conflits de bibliothèques C (PostgreSQL, cryptographie) et de la multiplicité des services à démarrer simultanément (Scheduler, Webserver, Triggerer, Redis, PostgreSQL).

La méthode officielle recommandée par l'équipe d'Apache Airflow pour le développement et la production est le déploiement conteneurisé via Docker Compose.

flowchart TD
    subgraph Hote["Machine Hôte (Votre Poste / Serveur)"]
        DIR["Dossier Projet : apache-airflow/<br>├── dags/ (Vos scripts Python)<br>├── logs/ (Journaux d'exécution)<br>├── plugins/ (Opérateurs custom)<br>└── .env (AIRFLOW_UID=50000)"]
    end
    subgraph Compose["Conteneurs Docker Compose"]
        WEB["airflow-webserver (Port 8080)"]
        SCHED["airflow-scheduler"]
        WORKER["airflow-worker"]
        TRIG["airflow-triggerer"]
        PG["postgres:13 (Port 5432)"]
        REDIS["redis:7.2 (Port 6379)"]
    end
    DIR -->|Montage de volumes partagés| Compose
    style Hote fill:#f1f5f9,stroke:#475569
    style Compose fill:#e0f2fe,stroke:#0284c7,stroke-width:2px,color:#0f172a

1. Prérequis techniques#

Avant de commencer, vérifiez que votre machine dispose des éléments suivants : - Docker Engine (version 20.10.0 ou supérieure) et Docker Compose v2 (docker compose version). - Ressources mémoire allouées à Docker : Apache Airflow fait tourner plusieurs conteneurs en parallèle. Allouez au minimum 4 Go de RAM (8 Go fortement recommandés) dans les paramètres de Docker Desktop (onglet Resources > Advanced), sous peine de voir le conteneur du Scheduler planter silencieusement par manque de mémoire (OOM Kill).


2. Préparer l'environnement de travail#

Créez un répertoire dédié à votre projet Airflow et positionnez-vous dedans :

mkdir -p apache-airflow
cd apache-airflow

Créez l'arborescence des sous-dossiers locaux qui seront montés comme volumes dans les conteneurs :

mkdir -p ./dags ./logs ./plugins ./config
  • ./dags : Contiendra l'ensemble de vos fichiers de pipelines Python.
  • ./logs : Réceptionnera les fichiers journaux d'exécution de toutes les tâches.
  • ./plugins : Contiendra vos composants personnalisés (Hooks ou Operators custom).
  • ./config : Contiendra vos configurations spécifiques et templates d'alerte.

Configurer l'UID utilisateur (.env)#

Pour éviter les problèmes de permissions de fichiers entre l'hôte et les conteneurs Linux sous Linux et macOS :

echo -e "AIRFLOW_UID=$(id -u)" > .env

[!NOTE] Si vous êtes sous Windows natif, vous pouvez simplement renseigner AIRFLOW_UID=50000 dans votre fichier .env.


3. Télécharger le fichier docker-compose.yaml officiel#

Téléchargez le manifeste officiel d'Apache Airflow à l'aide de curl :

curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.8.2/docker-compose.yaml'

Ce fichier configure l'ensemble des services nécessaires : 1. airflow-webserver : Interface utilisateur accessible sur le port 8080. 2. airflow-scheduler : Analyseur de DAGs et ordonnanceur. 3. airflow-worker : Exécuteur Celery des tâches de calcul. 4. airflow-triggerer : Gestionnaire d'événements asynchrones. 5. airflow-init : Conteneur éphémère d'initialisation de la base de données. 6. postgres : Base de données de métadonnées. 7. redis : Broker de messages pour Celery.


4. Personnaliser la configuration (.env)#

Avant de lancer les conteneurs, désactivons le chargement des centaines de DAGs d'exemples fournis par défaut, afin d'avoir une interface épurée :

Ajoutez ces lignes à votre fichier .env :

.env
# Désactiver les exemples par défaut
AIRFLOW__CORE__LOAD_EXAMPLES=false

# Mettre en pause les nouveaux DAGs lors de leur première détection
AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION=true

# Activer le bouton de test des connexions dans l'interface
AIRFLOW__CORE__TEST_CONNECTION=Enabled

5. Initialiser la base de métadonnées#

Exécutez la commande d'initialisation. Elle applique les migrations SQL sur PostgreSQL et crée automatiquement le compte administrateur par défaut :

docker compose up airflow-init

Lorsque l'initialisation se termine avec succès, vous devez voir s'afficher la ligne :

airflow-init_1  | User "airflow" created with role "Admin"
apache-airflow-airflow-init-1 exited with code 0

6. Démarrer les services Airflow#

Lancez l'ensemble des conteneurs en arrière-plan (mode détaché -d) :

docker compose up -d

Vérifiez que tous les services sont démarrés et en bonne santé (healthy) :

docker ps
Résultat attendu
CONTAINER ID   IMAGE                  STATUS                   PORTS                    NAMES
dffe55153e76   apache/airflow:2.8.2   Up 2 minutes (healthy)   8080/tcp                 apache-airflow-airflow-worker-1
c2f46e2e2f60   apache/airflow:2.8.2   Up 2 minutes (healthy)   0.0.0.0:8080->8080/tcp   apache-airflow-airflow-webserver-1
6212b8a06ed0   apache/airflow:2.8.2   Up 2 minutes (healthy)   8080/tcp                 apache-airflow-airflow-triggerer-1
62c6c0029c6d   apache/airflow:2.8.2   Up 2 minutes (healthy)   8080/tcp                 apache-airflow-airflow-scheduler-1
c06f21ba45b7   postgres:13            Up 2 minutes (healthy)   5432/tcp                 apache-airflow-postgres-1
3cccfbc13578   redis:7.2-bookworm     Up 2 minutes (healthy)   6379/tcp                 apache-airflow-redis-1

7. Connexion à l'interface Web#

  1. Ouvrez votre navigateur et naviguez sur http://localhost:8080/.
  2. Vous accédez à la page d'authentification :

Page de connexion officielle d'Apache Airflow

  1. Saisissez les identifiants d'administration par défaut :
  2. Nom d'utilisateur : airflow
  3. Mot de passe : airflow
  4. Vous accédez au tableau de bord central d'Airflow :

Tableau de bord d'accueil de l'interface Airflow


8. Arrêter ou redémarrer l'environnement#

Pour arrêter temporairement vos conteneurs sans perdre vos données ni vos historiques :

docker compose down

[!NOTE] L'instruction docker compose down arrête et supprime les conteneurs, mais préserve intégralement les volumes Docker contenant vos métadonnées. Lorsque vous relancerez docker compose up -d, vous retrouverez tous vos DAGs, historiques et connexions exactement là où vous les aviez laissés.


9. Installer des dépendances Python supplémentaires#

Dans vos pipelines de données, vous aurez inévitablement besoin de bibliothèques tierces comme pandas, requests, scikit-learn ou des connecteurs cloud spécialisés.

[!WARNING] N'installez jamais de packages en direct dans les conteneurs avec docker exec pip install ! Dès que le conteneur sera recréé, vos modifications seront irrémédiablement perdues.

La bonne pratique consiste à construire une image personnalisée :

  1. Créez un fichier requirements.txt à la racine de votre dossier projet :

    requirements.txt
    pandas>=2.0.0
    requests>=2.31.0
    psycopg2-binary>=2.9.9
    apache-airflow-providers-postgres>=5.10.0
    

  2. Créez un fichier Dockerfile :

    Dockerfile
    FROM apache/airflow:2.8.2
    
    USER airflow
    COPY requirements.txt /requirements.txt
    RUN pip install --no-cache-dir -r /requirements.txt
    

  3. Modifiez la section build dans votre docker-compose.yaml (ou décommentez la ligne build: .) puis recompilez votre image :

    docker compose build
    docker compose up -d
    

Désormais, tous vos workers et votre scheduler partageront la même image enrichie et reproductible !


Votre environnement de développement Apache Airflow est opérationnel et sécurisé. Dans la leçon suivante, nous allons explorer en détail chaque recoin de l'interface graphique d'Airflow pour en maîtriser la navigation !

Commentaires

Inscrivez-vous à une formation complète

Voir le catalogue