Data Engineering/Airflow

[Airflow] Docker compose로 Airflow 실행하기

snoony 2024. 7. 16. 13:51

초기 설정

airflow-docker 디렉터리 만들어주고

(base) nayoungkim@nayoungkim airflow-docker % curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.9.0/docker-compose.yaml'
(base) nayoungkim@nayoungkim airflow-docker % echo -e "AIRFLOW_UID=$(id -u)" > .env
(base) nayoungkim@nayoungkim airflow-docker % docker compose up airflow-init
(base) nayoungkim@nayoungkim airflow-docker % chmod +x airflow.sh
(base) nayoungkim@nayoungkim airflow-docker % ls
airflow.sh		dags			logs
config			docker-compose.yaml	plugins
(base) nayoungkim@nayoungkim airflow-docker % ./airflow.sh airflow info
(base) nayoungkim@nayoungkim airflow-docker % docker ps                
CONTAINER ID   IMAGE          COMMAND                   CREATED         STATUS                   PORTS      NAMES
7d727ae3bf21   postgres:13    "docker-entrypoint.s…"   9 minutes ago   Up 3 minutes (healthy)   5432/tcp   airflow-docker-postgres-1
fc876aca6630   redis:latest   "docker-entrypoint.s…"   9 minutes ago   Up 3 minutes (healthy)   6379/tcp   airflow-docker-redis-1
(base) nayoungkim@nayoungkim airflow-docker % vi docker-compose.yaml            
(base) nayoungkim@nayoungkim airflow-docker % docker compose up

docker container 안으로 들어가는 명령어

(base) nayoungkim@nayoungkim airflow-docker % docker exec -it airflow-docker-airflow-webserver-1 /bin/bash

Airflow webserver 실행

http://localhost:8080/home 접속

나는 default 사용자로 로그인했다.

username / password : airflow

예제 dag들과 나의 dag를 확인 할 수 있다.

나는 count number 예제 dag를 돌려봤는데,

성공적으로 돌아간 것을 확인할 수 있었다.

사용한 dag 파일은 다음과 같다.

count.py

from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.bash import BashOperator

default_args = {
    "owner": "airflow",
    "depends_on_past": False,
    "email": ["airflow@example.com"],
    "email_on_failure": False,
    "email_on_retry": False,
    "retries": 1,
    "retry_delay": timedelta(minutes=5),
}

with DAG(
    "number_counting_dag",
    default_args=default_args,
    description="A simple DAG to count numbers",
    schedule_interval=timedelta(days=1),
    start_date=datetime(2024, 2, 12),
    catchup=False,
    tags=["example"],
) as dag:

    count_10 = BashOperator(
        task_id="count_10",
        bash_command="for i in {1..10}; do echo $i; sleep 1; done",
    )

    count_20 = BashOperator(
        task_id="count_20",
        bash_command="for i in {11..20}; do echo $i; sleep 1; done",
    )

    count_30 = BashOperator(
        task_id="count_30",
        bash_command="for i in {21..30}; do echo $i; sleep 1; done",
    )

    count_10 >> count_20 >> count_30

 

Airflow에서 pip 패키지 설정하기

docker-compose.yaml 수정

  image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.9.0}
  build:
   dockerfile: Dockerfile

Dockerfile 생성

FROM apache/airflow:2.9.0

# 필요한 Python 라이브러리 설치
RUN pip install xmltodict

나의 경우에는 xmltodict 라이브러리가 필요해서 설정해 주었다.

 

Airflow DAG에서 csv 파일 활용하기

외부 볼륨에 저장하여 Docker 컨테이너에서 접근할 수 있게 할 수 있습니다. 일반적으로 Airflow를 Docker로 실행할 때는 데이터 파일을 컨테이너 외부에 저장하고, 이를 볼륨 마운트를 통해 접근하는 방식을 많이 사용합니다.

docker-compose.yaml 파일 수정

services:
  airflow-webserver:
    volumes:
      - ./data:/opt/airflow/data  # 호스트의 `data` 디렉토리를 컨테이너의 `/opt/airflow/data`에 마운트

docker compose 재실행

docker-compose up -d --build

참고한 블로그

https://95mkr.tistory.com/entry/airflow1