Blog logo콜로리 블로그
개발 > 데이터
1달 전

Docker compose를 이용해 Airflow를 Mac에서 띄워보기

사전 준비

  • Docker or RancherDesktop 설치
  • Docker 기본 지식 (혹시나 충분히 학습을 하지 못했더라도 일단 따라해보고 공부해보는것도 방법)



배치 작업의 스케쥴링 관리를 위해 맥 M1에서 Apache Airflow를 설치하려고한다.

Installation of Airflow 에 보면 다양한 설치 방법이 있지만 나는 로컬 환경에서 작업하기 위한 것이 목적이며,

의존성이 많아져 관리포인트가 높아지는걸 원치 않으므로 도커를 이용하기로 했다.




먼저 airflow를 운영 관리하기 위한 프로젝트 디렉토리를 구성해주어야 한다.

아래 명령어와 같이 dags, logs, plugins, config 라는 각각의 디렉토리가 모두 필요하다.

참고로 docker compose로 구성이 완료되면 자동으로 언급된 디렉토리들을 구성해주니 참조만하자.

mkdir sample-airflow
cd sample-airflow
mkdir -p ./dags ./logs ./plugins ./config
echo -e "AIRFLOW_UID=$(id -u)" > .env

또한 AIRFLOW_UID 라는 환경변수로 airflow 컨테이너에서 이용될 유저 ID가 지정된다.




프로젝트 경로로 이동해 아래 명령어로 docker-compose.yaml 파일을 다운로드해주자.

curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.9.0/docker-compose.yaml'





다운로드된 yaml파일은 Airflow를 운영하기 위한 postgres, redis, webserver, worker, scheduler 에 대한 기본 구성이 이미 되어있다.

혹시나 docker-compose.yaml 파일을 특정한 경로에서 관리하고 싶다면

docker-compose.yaml 파일 내용에서 아래와 같이 ${AIRFLOW_PROJ_DIR:-.} 의 경로를 찾아 직접 지정해주면 된다.

  volumes:
    - ${AIRFLOW_PROJ_DIR:-.}/dags:/opt/airflow/dags
    - ${AIRFLOW_PROJ_DIR:-.}/logs:/opt/airflow/logs
    - ${AIRFLOW_PROJ_DIR:-.}/config:/opt/airflow/config
    - ${AIRFLOW_PROJ_DIR:-.}/plugins:/opt/airflow/plugins




docker compose 명령어로 Airflow 초기화를 실행해준다.

docker compose up airflow-init





airflow-init 후에 실행된 컨테이너 확인하면 Airflow 에 필요한 DB들이 구성되어있다.

docker ps




이제 Airflow를 실행해주자. -d 옵션은 백그라운드에서 실행해준다.

up 명령어 실행 후 ps 명령어로 확인했을때 health: starting 없이 모두 Up 상태라면 실행이 모두 완료된 것이다.

docker compose up -d
docker ps




http://localhost:8080 로 접속하면 Airflow Web 에 접근이 가능하며

airflow 유저에 대한 ID와 비밀번호를 별도로 지정하지 않았다면 airflow / airflow 로 로그인 가능하다.




로그인 후에 airflow에서 튜토리얼 용도로 구성해준 샘플 DAG들 확인이 가능하다.

필요 없으면 휴지통 아이콘을 클릭해 지워주면 된다.






이렇게 docker를 이용해서 간단하게 airflow를 띄워봤다.

airflow를 설치하기 위해서는 python, redis, postgresql와 같은 설치가 필요한데

docker를 이용하면 자유롭게 컨테이너로 PC에 설치된 버전 충돌 없이 구성이 가능한 장점이 있다.

하지만 실제 서비스를 위한 운영환경에서는 직접 docker-compose 구성을 적절하게 변경해주어 하므로 주의해서 올바르게 구성하는 것을 권장한다.


#Airflow#Scheduler#Docker