[Airflow] Docker-Compose로 Airflow 구성하기

hwwwa·2023년 3월 30일
0

🪁 Airflow

목록 보기
2/3

🌊 Docker-Compose로 Airflow 구성하기

  • Docker를 사용하여 Airflow를 구성하려면 airflow-webserver, airflow-scheduler, airflow-triggerer, airflow-worker, postgres, redis의 최소 6개의 컨테이너를 직접 설정해주어야 한다.
  • Docker Compose를 사용하면 docker-compose.yaml에 필요한 컨테이너에 대해 설정해주면 Airflow를 쉽게 구성할 수 있다.
  • Apache 공식 사이트에서 제공하는 docker-compose 설정을 사용하여 구성해보자.
# CentOS 패키지 관리자 업데이트
sudo yum -y update

# python 3.9 바이너리 다운로드
sudo yum install -y gcc openssl-devel bzip2-devel libffi-devel
wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz

# 압축 풀기
tar -xvf Python-3.9.5.tgz
rm Python-3.9.5.tgz

# Python 설치
cd Python-3.9.5/ 
./configure --enable-optimizations
sudo make altinstall
cd ..

# Airflow 설치에 필요한 패키지 설치
sudo yum install -y python3-pip python3-devel gcc gcc-c++ libffi-devel openssl-devel python3-setuptools

# 기타 필요한 패키지 설치
sudo pip3 install -y pymysql

# 가상환경 생성을 위해 virtualenv 설치
sudo pip3 install -y virtualenv

# Airflow를 위한 가상환경 생성 (python 3.9 버전으로 지정)
virtualenv -p python3.9 airflow-docker-env

# 가상환경 활성화
source airflow-docker-env/bin/activate

# Docker 설치
# yum-utiles 패키지 설치
sudo yum -y update
sudo yum install -y yum-utils

# Docker repository 설정
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 특정 버전의 Docker Engine 설치 (현재 최신 버전 v23.0.1)
version='23.0.1'
sudo yum install -y docker-ce-${version} docker-ce-cli-${version} containerd.io docker-buildx-plugin docker-compose-plugin

# Docker 실행
sudo systemctl start docker

# 부팅 시 Docker 데몬 자동 시작 설정
sudo systemctl enable docker
sudo systemctl enable docker.service
sudo systemctl enable containerd.service

# docker 그룹 생성 (Docker 설치 시 자동으로 생성되어있을 수 있음)
sudo groupadd docker

# docker 그룹에 사용자 추가
sudo usermod -aG docker $USER

# 그룹 변경 사항 활성화
newgrp docker

# CentOS 7 공식 도커 이미지 다운받기
docker image pull centos:7

# docker-compose 설치 (현재 최신 버전 v2.16.0)
sudo yum -y update
sudo yum install -y docker-compose-plugin

# docker-compose.yaml 다운로드 (현재 최신 버전 v2.5.1)
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.5.1/docker-compose.yaml'

# docker-compose.yaml 수정
# x-airflow-common: volumes 부분에 소스 코드를 올릴 폴더(codes)를 추가로 mount
sed -i 's/^  volumes:/  volumes:\n    \- ${AIRFLOW_PROJ_DIR:-.}\/codes:\/opt\/airflow\/codes/1' docker-compose.yaml
# airflow-scheduler - 스케줄러는 모든 JOB과 DAG를 모니터링하고 dependency가 완료되면 task 인스턴스를 트리거
# airflow-webserver - 웹서버 사용 가능. port:8080
# airflow-worker - 스케줄러가 부여한 작업을 수행하는 워커
# airflow-init - 초기화 서비스
# postgres - 메타데이터가 저장되는 데이터베이스
# redis - 스케줄러에서 워커로 메시지를 전달하는 메세지 브로커
# flower - 환경 모니터링을 위한 플라워 앱. port:5555

# docker-compose.yaml에 공유 볼륨으로 설정된 디렉토리들을 미리 생성하여 로컬에서 접속 가능하도록 함
mkdir -p ./dags ./logs ./plugins ./codes

# env 파일 생성
echo -e "AIRFLOW_UID=$(id -u)\nAIRFLOW_GID=0" > .env

# airflow init
docker compose up airflow-init

# docker-compose.yaml 파일 실행
docker compose up
# 최초 계정은 airflow/airflow

# 실행중인 docker-compose.yaml 파일 종료하기
# docker compose down

🐳 도커 상태 확인

  • docker-compose.yaml에 설정된 것 처럼 총 6개의 컨테이너가 잘 실행된 것을 볼 수 있음


참고 링크

0개의 댓글