Cài đặt Apache Airflow với Docker Compose
Note: This post is over 7 years old. The information may be outdated.
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.
Note (2025): Bài viết này sử dụng Airflow 1.10.4 và Docker image
puckel/docker-airflowđã không được maintain. Với Airflow 2.x, nên sử dụng official Docker image từ Apache Airflow.
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.
Tham khảo
Related Posts
Airflow - một số ghi chép
Một số ghi chép, tips & tricks của mình trong quá trình sử dụng Apache Airflow.
Gửi Slack Alerts trên Airflow
Slack là một công cụ khá phổ biến trong các Team, slack giúp tập hợp mọi thông tin về Slack (như Jira alert, ETL pipelines, CI/CD status, deployments, ...) một cách thống nhất và dễ dàng theo dõi. Bài viết này mình hướng dẫn gửi mọi báo lỗi của Airflow đến Slack.
Airflow - "context" dictionary
Biến `context` trong airflow là biến hay sử dụng trong Airflow (`PythonOperator` with a callable function), nhưng mình rất hay quên, note lại đây để dễ dàng tra cứu.
Airflow 2.0 - Taskflow API
Chú trọng vào việc đơn giản hóa và rõ ràng cách viết Airflow DAG, cách trao đổi thông tin giữa các tasks, Airflow 2.0 ra mắt Taskflow API cho phép viết đơn giản và gọn gàng hơn so với cách truyền thống, đặc biệt vào các pipelines sử dụng PythonOperators.