LogoDuyệtSr. Data Engineer
HomeAboutPhotosInsightsCV

Footer

Logo

Resources

  • Rust Tiếng Việt
  • /archives
  • /series
  • /tags
  • Status

me@duyet.net

  • About
  • LinkedIn
  • Resume
  • Projects

© 2026 duyet.net | Sr. Data Engineer

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

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

  • https://github.com/duyet/airflow-docker-compose
  • puckel/docker-airflow
  • https://towardsdatascience.com/getting-started-with-airflow-using-docker-cd8b44dbff98
Aug 26, 2019·6 years ago
|Data Engineering|
Apache AirflowDataData Engineering
|Edit|
On this page
  • 1.1 Dockerfile
  • 1.2 docker-compose.yaml
  • 2. Chạy Docker compose
  • Tham khảo
On this page
  • 1.1 Dockerfile
  • 1.2 docker-compose.yaml
  • 2. Chạy Docker compose
  • Tham khảo