Tôi là Duyệt

Cài đặt Apache Airflow với Docker Compose

Trong bài này mình sẽ hướng dẫn cách thiết lập môi trường develop Apache Airflow dưới local bằng Docker Compose.

TL;DR Source ví dụ của bài viết này: https://github.com/duyet/airflow-docker-compose

Airflow in Docker Compose

1. Cấu trúc project

Đầu tiên thiết lập cấu trúc project như dưới đây. Thư mục dags sẽ chứa các DAG python của Airflow.

.
├── dags
│   └── first_dag.py
├── Dockerfile
└── docker-compose.yaml

1.1 Dockerfile

Nội dung file Dockerfile:

FROM puckel/docker-airflow:1.10.4
COPY dags /usr/local/airflow/dags
# RUN pip install <packages> ...

Dockerfile ở đây mình kế thừa của tác giả Puckel, COPY thư mục dags vào Docker image. Có thể cài thêm các thư viện khác bằng lệnh Docker RUN <cmd>.

1.2 docker-compose.yaml

Nội dung file docker-compose.yaml:

version: '2.1'

services:
    postgres:
        image: postgres:9.6
        environment:
            - POSTGRES_USER=airflow
            - POSTGRES_PASSWORD=airflow
            - POSTGRES_DB=airflow
        volumes:
            - /tmp/postgres-data:/var/lib/postgresql/data

    webserver:
        build: .
        restart: always
        depends_on:
            - postgres
        environment:
            - LOAD_EX=n
            - EXECUTOR=Local
            - AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@postgres:5432/airflow
        volumes:
            - ./dags:/usr/local/airflow/dags
            - /tmp/airflow_logs:/root/airflow/logs
        ports:
            - "8080:8080"
        command: webserver
        healthcheck:
            test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
            interval: 30s
            timeout: 30s
            retries: 3

    scheduler:
        build: .
        restart: always
        depends_on:
            - postgres
        environment:
            - LOAD_EX=n
            - EXECUTOR=Local
            - AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@postgres:5432/airflow
        volumes:
            - ./dags:/usr/local/airflow/dags
            - /tmp/airflow_logs:/root/airflow/logs
        command: scheduler

Docker compose mình thiết lập gồm các service:

  • Postgres
  • Airflow Webserver
  • Airflow Scheduler

Mount thư mục ./dags:/opt/airflow/dags để link thư mục dags với thư mục trong Docker instance.

Note: mount thư mục /root/airflow/logs để Webserver có thể đọc được logs từ Scheduler.

2. Chạy Docker compose

Tại thư mục project:

docker-compose up

Docker Compose Up - Terminal

Truy cập Airflow: http://localhost:8080

Airflow UI in Local

Từ bây giờ mình có thể viết và test các DAG bằng cách viết trong thư mục dags.

Chúc các bạn thành công.

Tham khảo