본문 바로가기
Programming

Airflow 도커로 설치하기

by 느리게 걷는 즐거움 2024. 3. 19.
반응형

Airflow 도커로 설치하기

Apache Airflow는 배치 지향 워크플로를 개발, 예약 및 모니터링하기 위한 오픈 소스 플랫폼입니다. Airflow의 확장 가능한 Python 프레임워크를 사용하면 거의 모든 기술과 연결되는 워크플로를 구축할 수 있습니다. 웹 인터페이스는 워크플로 상태를 관리하는 데 도움이 됩니다. Airflow는 랩톱의 단일 프로세스에서 대규모 워크플로를 지원하는 분산 설정에 이르기까지 다양한 방식으로 배포할 수 있습니다. 도커를 이용하여 Airflow를 설치하는 과정을 진행하고 내용을 정리합니다.

Airflow 컨테이너가 실행되기 위해서는 최소 4기가의 메모리를 사용할 수 있어야 한다고 합니다. 도커를 실행하기 위한 도커엔진(Docker Engine)과 도커 컴포즈(Docker Compose)설치가 필요합니다.

이 둘 사이에는 버전 의존성이 있기 때문에 동작에 문제가 있다면 버전 의존성 문제가 있는 지 확인이 필요합니다. 가이드 문서에서는 도커 컴포즈 v1.29.1 이상을 사용하도록 가이드 하고 있습니다. 설치를 위해 사용되는 Airflow의 docker-compose.yaml는 낮은 버전에서 동작하지 않을 수 있다고 합니다.

도커로 Airflow 설치하기

Airflow를 설치를 위해 Airflow폴더를 생성합니다. 가이드 문서에서는 개인 home에서 "airflow" 폴더를 생성해서 설치를 시작합니다. 필요한 폴더와 환경정보를 저장하기 위해 아래의 코드를 실행합니다.

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

폴더구조와 환경정보가 생성되었으니  yaml파일을 다운로드합니다. 이 파일은 Airflow 동작을 위해 필요한 도커 서비스 정보를 저장합니다. 

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

초기에는 데이터베이스 적용과 유저정보를 생성하기 위한 아래의 명령을 수행합니다. 초기화가 완료되면 도커 이미지를 실행합니다. 

docker compose up airflow-init # 초기화
docker compose up

"docker compose up"명령으로 도커가 실행되면 http://localhost:8080으로 접속하여 airflow를 사용할 수 있습니다. airflow의 초기 ID/PW는 "airflow"/"airflow"로 설정되어 있습니다. 도커 명령은 모두 sudo명령을 실행되어야 합니다. 권한상 문제가 있다면 "sudo" 명령을 command 앞에 함께 사용하세요

 

 

Airflow 설치 시 에러가 발생한다면 설치된 내용을 모두 삭제하고 yaml을 새롭게 다운로드해서 진행하는 것을 가이드 하고 있습니다. 아래의 명령을 실행하고 docker-compose.yml가 설치된 폴더를 "rm -rf <DIRECTOR>'로 모두 삭제하고 새롭게 yaml파일을 다운로드하려 과정을 다시 시작합니다. 

docker compose down --volumes --remove-orphans

 

도커 실행 시 발생하는 문제

Airflow를 실행하기 위해서는 'docker-compose up' 명령을 사용합니다. 실행 시 airflow가 port가 이미 할당되어 실행할 수 없는 경우가 있습니다. 

# docker-compose up
...
Error response from daemon: driver failed programming external connectivity on endpoint airflow-airflow-webserver-1 (0c865f462174a2ad2c267e2636f3d89c9c926dda77ccd3041f4a86e40e6c0525): Bind for 0.0.0.0:8080 failed: 
port is already allocated

원인은 도커 이미지가 올라가 있어 해당 port를 사용 중이기 때문입니다. 이 경우 컨테이너를 stop해야 합니다.

# docker-compose stop

docker-compose의 ps명령으로 컨테이너 목록을 확인하면 실행되고 있는 컨테이너가 없음을 알 수 있습니다. 그리고 8080포트를 사용하고 있는 프로세스를 종료하기 위해 `sudo lsof -i :8080`명령을 실행합니다. 

# docker-compose ps
NAME                IMAGE               COMMAND             SERVICE             CREATED             STATUS              PORTS

# sudo lsof -i :8080
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 3430 root    4u  IPv4  44742      0t0  TCP *:http-alt (LISTEN)
# kill -9 3430

참고로 도커 컨테이서에 command 명령 사용하기 위해서 airflow에서 제공하는 script를 이용합니다.

curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.6.3/airflow.sh'
chmod +x airflow.sh

 

반응형