Aller au contenu

Installer Apache Airflow avec Docker

Docker est le meilleur moyen de déployer Apache Airflow. Dans ce tutoriel je vous montre comment procéder.

Télécharger le fichier docker-compose.yaml

Veuillez créer un dossier dédié à Apache Airflow

mkdir apache-airflow
cd apache-airflow

Télechargez le fichier docker-compose.yaml indiqué dans la documentation officielle.

wgets https://airflow.apache.org/docs/apache-airflow/2.6.1/docker-compose.yaml
Le fichier docker-compose.yaml est téléchargé sur votre machine dossier courant.

Créez les répertoires suivants

mkdir -p ./dags ./logs ./plugins ./config
echo -e "AIRFLOW_UID=$(id -u)" > .env

Définir AIRFLOW_HOME

La variable AIRFLOW_HOME indique le chemin vers le dossier d'Apache Airflow

export AIRFLOW_HOME=$(pwd)
echo 'export AIRFLOW_HOME=$(pwd)' >> ~/.bashrc

Initialiser la base de données

Dans un premier, il faut initialiser la base de données qui va stocker les données des utilisateurs et des flux qui seront créés.

docker compose up airflow-init -d
Un utilisateur airflow est également créé avec le mot de passe airflow et le rôle Admin.

Démarrer les services de Airflow

Maintenant, il faut lancer les différents services d'Apache Airflow à savoir airflow-scheduler, airflow-webserver, airflow-worker et airflow-triggerer.

docker compose up -d

Une fois la commande exécutée, vous pouvez vérifier l'état des conteneurs déployés avec la commande suivante

docker ps
Output
CONTAINER ID   IMAGE                  COMMAND                  CREATED        STATUS                 PORTS                    NAMES
87cdbab20845   apache/airflow:2.6.1   "/usr/bin/dumb-init …"   3 hours ago    Up 3 hours (healthy)   8080/tcp                 apache-airflow-airflow-triggerer-1
b9413c6fbeee   apache/airflow:2.6.1   "/usr/bin/dumb-init …"   3 hours ago    Up 3 hours (healthy)   8080/tcp                 apache-airflow-airflow-scheduler-1
61f7bd92877b   apache/airflow:2.6.1   "/usr/bin/dumb-init …"   3 hours ago    Up 3 hours (healthy)   0.0.0.0:8080->8080/tcp   apache-airflow-airflow-webserver-1
aee2d3cea33b   apache/airflow:2.6.1   "/usr/bin/dumb-init …"   3 hours ago    Up 3 hours (healthy)   8080/tcp                 apache-airflow-airflow-worker-1
69979805360b   redis:latest           "docker-entrypoint.s…"   3 hours ago    Up 3 hours (healthy)   6379/tcp                 apache-airflow-redis-1
dfb0b452a8f0   postgres:13            "docker-entrypoint.s…"   3 hours ago    Up 3 hours (healthy)   5432/tcp                 apache-airflow-postgres-1

Docs Apache Airflow : Running Airflow in Docker

Connexion

Rendez-vous à l'adresse http://localhost:8080/. Vous serez redirigé vers la page de connexion

Connectez-vous avec l'utilisateur airflow avec le mot de passe airflow

Arrêter Apache Airflow

Pour arrêter Apache Airflow, depuis le dossier d'Apache Airflow, lancez la commande suivante

docker compose down
Output
PS C:\Users\Administrateur\Documents\dev\apache-airflow> docker compose down
time="2023-06-17T23:25:55Z" level=warning msg="The \"AIRFLOW_UID\" variable is not set. Defaulting to a blank string."
time="2023-06-17T23:25:55Z" level=warning msg="The \"AIRFLOW_UID\" variable is not set. Defaulting to a blank string."
[+] Running 8/8
 - Container apache-airflow-airflow-worker-1     Removed                                                          11.3s
 - Container apache-airflow-airflow-webserver-1  Removed                                                          12.0s
 - Container apache-airflow-airflow-triggerer-1  Removed                                                           5.5s
 - Container apache-airflow-airflow-scheduler-1  Removed                                                           9.1s
 - Container apache-airflow-airflow-init-1       Removed                                                           0.7s
 - Container apache-airflow-postgres-1           Removed                                                           0.8s
 - Container apache-airflow-redis-1              Removed                                                           0.6s
 - Network apache-airflow_default                Removed                                                           0.7s
NB : Docker arrête simplement les contenuers, vos données ne seront pas perdues. Vous pourrez redémarrer à tout moment.

Il est souvent nécessaire d'installer des packages additionnels, on peut se connecter au conteneur et

docker exec -it  apache-airflow-airflow-scheduler-1 /bin/bash
Une fois à 'linstérieur du conteneur, vous pouvez installer les packages avec pip
pip install pandas db-analytics-tools
Cela marche bien mais ce n'est pas la bonne manière de faire. L'idéal c'est reconstruire l'image Airflow. Pour cela, créez un fichier Dockerfile dans le dossier que docker-compose.yml avec le contenu suivant
Dockerfile
FROM apache/airflow:2.6.1

USER airflow

COPY requirements.txt /requirements.txt

RUN pip install --no-cache-dir -r /requirements.txt

deploy.sh
#!usr/bin/bash

docker compose down

docker compose build

docker compose up airflow-init -d

docker compose up -d
bash deploy
Airflow Component Container
Web Server apache-airflow-airflow-webserver
Scheduler apache-airflow-airflow-scheduler
Executor apache-airflow-airflow-worker, apache-airflow-airflow-triggerer
Queue apache-airflow-redis
Workers apache-airflow-airflow-worker
Metadatabase apache-airflow-postgres

Bravo, tout est prêt maintenant. Dans la prochaine section, vous découvrirez les composants d'Apache Airflow.