터칭 데이터
Airflow Docker docker-compose.yml 리뷰 본문
Docker 기반 Airflow 실행
Docker 기반 Airflow 설치 문서 참조
먼저 터미널 프로그램을 실행하고 적당한 폴더로 이동
airflow-setup Github repo를 클론
git clone https://github.com/keeyong/airflow-setup.git
airflow-setup 폴더로 이동하고 2.5.1 이미지 관련 yml 파일 다운로드
cd airflow-setup
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.5.1/docker-compose.yaml'
다음 2개의 명령을 수행 (이미지 다운로드와 컨테이너 실행)
docker-compose -f docker-compose.yaml pull
docker-compose -f docker-compose.yaml up
사실 up이 이미지가 없을 경우 pull까지 하기 때문에 2번째 줄 up만 사용해도 됩니다.
http://localhost:8080으로 웹 UI 로그인
airflow:airflow 사용
앞서 다운로드 받은 docker-compose.yaml 파일 내용 보기
version
version: '3'
Docker 1.27버전 이후로는 version:이 필요 없습니다.
Docker compose 2와 3의 약간 달랐던 문법을 1.27 이후로 통일했습니다.
x-airflow-common
airflow-common이라는 별칭 정의. 여러 서비스에서 공유하는 공통 구성을 정의
이를 보통 anchor라고 부르며 YML 파일 블록을 나중에 계승이란 형태로 재사용 가능하게 해줌
version, services, volumes, networks를 제외한 최상위 레벨 키워드는 모두 anchor
services
postgres
redis
airflow-webserver
airflow-scheduler
airflow-worker
airflow-triggerer
airflow-init
volumes
postgres-db-volume
x-airflow-common
docker-compose.yml
x-airflow-common:
&airflow-common # 이하의 내용들의 별칭
image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.5.1} # 즉 같은 airflow 이미지가 모든 서비스 기본 이미지로 사용됨
# build: .
environment:
&airflow-common-env
AIRFLOW__CORE__EXECUTOR: CeleryExecutor
...
_PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:-}
volumes: # 모두 세 개의 volume을 공유함 (host volumes)
- ${AIRFLOW_PROJ_DIR:-.}/dags:/opt/airflow/dags
- ${AIRFLOW_PROJ_DIR:-.}/logs:/opt/airflow/logs
- ${AIRFLOW_PROJ_DIR:-.}/plugins:/opt/airflow/plugins
user: "${AIRFLOW_UID:-50000}:0"
depends_on:
&airflow-common-depends-on
redis:
condition: service_healthy
postgres:
condition: service_healthy
airflow-scheduler 서비스 보기
airflow-webserver:
<<: *airflow-common # 위에서 본 airflow-common에서 정의한 내용들을 그대로 쓰겠다는 뜻 (재활용!)
command: webserver
ports:
- 8080:8080
healthcheck:
test: ["CMD", "curl", "--fail", "http://localhost:8080/health"]
interval: 10s
timeout: 10s
retries: 5
restart: always
depends_on:
<<: *airflow-common-depends-on
airflow-init:
condition: service_completed_successfully
Dag를 구현하며 특정 파이썬 모듈을 설치해야한다면?
import yfinance as yf
@task
def get_historical_prices(symbol):
ticket = yf.Ticker(symbol)
data = ticket.history()
DAG를 구현하며 새로 생긴 모듈을 어떻게 설치해주어야할까?
일일히 docker container에 들어가서 설치해주는 것은 유지보수도 안되고 불가능!
docker-compose.yaml에 답이 있음
Dag를 구현하며 특정 파이썬 모듈을 설치해야한다면?
x-airflow-common에서 _PIP_ADDITIONAL_REQUIREMENTS의 값을 변경
Before:
_PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:-}
After:
_PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:- yfinance pandas
numpy}
'Docker & K8S' 카테고리의 다른 글
서버 관리의 어려움 (0) | 2023.12.21 |
---|---|
Docker 정리 (0) | 2023.12.21 |
voting application의 docker-compose.yml 개선하기 (0) | 2023.12.21 |
10주차 - 4 [Docker & K8S] (0) | 2023.12.21 |
Docker-Compose로 다수의 Container 프로그램 실행하기 (실습) (0) | 2023.12.21 |