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
   
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
   
Truy cập Airflow: http://localhost:8080
   
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.