Cài đặt Apache Airflow với Docker Compose
MarkdownView HTML version
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.
```bash
.
├── dags
│ └── first_dag.py
├── Dockerfile
└── docker-compose.yaml
```
## 1.1 `Dockerfile`
Nội dung file `Dockerfile`:
```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](https://github.com/puckel/docker-airflow), `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`:
```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:
```bash
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
- https://github.com/duyet/airflow-docker-compose
- [puckel/docker-airflow](https://github.com/puckel/docker-airflow)
- https://towardsdatascience.com/getting-started-with-airflow-using-docker-cd8b44dbff98