Docs 참고 -> Running Airflow in Docker
Docker Compose YAML 파일 -> Airflow YAML
위의 yaml 파일을 docker-compose.yaml
에 저장 후 바로 실행해도 무방하지만 UI에 접속했을 때 예시 Dag들을 보여주는 AIRFLOW__CORE__LOAD_EXAMPLES
옵션을 false
로 주고 설치를 해 볼 것이다.
version: '3.8'
x-airflow-common:
&airflow-common
.
.
AIRFLOW__CORE__LOAD_EXAMPLES: 'false'
리눅스 명령어가 먹히도록 WSL 터미널로 접속한 후 아래 과정을 따라간다.
1.설치 전 명령어 실행
> mkdir -p ./dags ./logs ./plugins ./config
> echo -e "AIRFLOW_UID=$(id -u)" > .env
2. 생성된 .env 파일의 'AIRFLOW_UID' 변경
> AIRFLOW_UID=50000
3. Database 초기화
> docker compose up airflow-init
4. 초기화 완료 후 docker-compose.yaml 파일 실행
> docker-compose up
docker-compose up 후 약간의 시간이 지나고 docker ps
로 실행중인 컨테이너 목록들을 확인해본다. 아래와 같이 6개의 컨테이너들이 모두 running 상태이면 로컬에 airflow 설치가 완료된것이다.
36ee9f84912a apache/airflow:2.7.3 "/usr/bin/dumb-init …" 2 days ago Up 2 hours (healthy) 8080/tcp airflow-airflow-worker-1
36d1e01e3c68 apache/airflow:2.7.3 "/usr/bin/dumb-init …" 2 days ago Up 2 hours (healthy) 8080/tcp airflow-airflow-triggerer-1
13f680ae5c99 apache/airflow:2.7.3 "/usr/bin/dumb-init …" 2 days ago Up 2 hours (healthy) 0.0.0.0:8080->8080/tcp airflow-airflow-webserver-1
495d12522c6e apache/airflow:2.7.3 "/usr/bin/dumb-init …" 2 days ago Up 2 hours (healthy) 8080/tcp airflow-airflow-scheduler-1
b020a41c2646 redis:latest "docker-entrypoint.s…" 2 days ago Up 2 hours (healthy) 6379/tcp airflow-redis-1
9294b2a1b2a2 postgres:13 "docker-entrypoint.s…" 2 days ago Up 2 hours (healthy) 5432/tcp airflow-postgres-1
localhost:8080
으로 접속하면 airflow UI에 들어갈 수 있으며 ID : airflow / PW : airflow
를 입력하여 로그인 할 수 있다.
따로 Dag 생성을 하지 않았기 때문에 첫 화면에 들어가면 아무런 Dag도 찾아볼 수 없다.
docker-compose.yaml 파일과 동일 경로에 dags
, logs
, plugins
, config
이렇게 4가지 디렉토리가 생성된 것을 확인 할 수 있다.
dags
디렉토리에 샘플 Dag를 아래와 같이 하나 생성해서 저장한다.
import pendulum
from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.operators.bash import BashOperator
from airflow.operators.python_operator import PythonOperator, BranchPythonOperator
from datetime import datetime
# timezone 한국시간으로 변경
kst = pendulum.timezone("Asia/Seoul")
# 기본 args 생성
default_args = {
'owner' : 'Hyunsoo Lee',
'email' : ['airflow@airflow.com'],
'email_on_failure': False
}
with DAG(
dag_id='first_dag',
default_args=default_args,
start_date=datetime(2023, 12, 1, tzinfo=kst),
description='Choosing Best Models',
schedule_interval='@once',
tags=['test'],
catchup=False
):
# python Operator에서 사용할 함수 정의
def print_hello():
print('hello world')
t1 = DummyOperator(
task_id='dummy_task_id',
retries=5,
)
t2 = PythonOperator(
task_id='Hello_World',
python_callable=print_hello
)
t1 >> t2
dag_id
로 명시해둔 first_dag
라는 이름의 dag가 하나 생성된 것을 확인할 수 있다.