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 | 2026-02-27

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·7 years ago
|Data Engineering|
Apache AirflowDataData Engineering
|Edit|

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.

Aug 27, 2019·7 years ago
Read more

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.

Aug 20, 2019·7 years ago
Read more

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.

Aug 9, 2019·7 years ago
Read more

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.

Dec 26, 2020·5 years ago
Read more
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