효율적인 데이터 파이프라인 관리를 위한 Apache Airflow 커스텀 도커 이미지 제작 가이드

Apache Airflow는 복잡한 데이터 워크플로우를 프로그래밍 방식으로 작성, 스케줄링 및 모니터링할 수 있는 강력한 오픈소스 플랫폼입니다. 기본적으로 제공되는 공식 이미지는 훌륭한 시작점이지만, 실제 운영 환경에서는 특정 라이브러리 추가, 보안 설정, 시스템 도구 설치 등 커스텀 환경 구성이 필수적입니다. ### 커스텀 도커 이미지가 필요한 이유 공식 이미지는 범용적인 용도로 설계되었기 때문에 다음과 같은 상황에서 커스텀 이미지 제작이 권장됩니다.
  • 프로젝트 전용 Python 패키지 설치
  • 컴파일이 필요한 시스템 종속성 라이브러리 추가
  • 보안 정책에 따른 사용자 권한 설정
  • 환경 변수 및 설정 파일의 이미지 내 포함
### 기본 커스텀 이미지 빌드 과정 가장 간단한 방법은 공식 Airflow 이미지를 베이스로 하여 필요한 Python 패키지를 추가하는 것입니다. #### 1. Dockerfile 작성 아래 예시는 공식 이미지에 `scikit-learn`과 `requests` 패키지를 추가하는 코드입니다.
# 공식 Airflow 이미지 선택
FROM apache/airflow:2.7.1

# 필요한 Python 패키지 설치
RUN pip install --no-cache-dir \
    scikit-learn \
    requests
#### 2. 이미지 빌드 실행 터미널에서 다음 명령어를 입력하여 이미지를 생성합니다.
docker build . \
  --pull \
  --tag airflow-custom-ext:1.0.0
### 고급 설정 및 최적화 기법 #### 시스템 레벨의 의존성 추가 데이터베이스 드라이버나 C 기반 라이브러리가 필요한 경우, `root` 권한으로 전환하여 패키지를 설치해야 합니다. 설치 후에는 반드시 다시 `airflow` 사용자로 복귀하는 것이 보안상 중요합니다.
FROM apache/airflow:2.7.1

USER root

# 시스템 패키지 업데이트 및 필요한 라이브러리 설치
RUN apt-get update \
  && apt-get install -y --no-install-recommends \
         build-essential \
         libpq-dev \
  && apt-get autoremove -yqq --purge \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*

USER airflow

# 추가 라이브러리 설치
RUN pip install --no-cache-dir psycopg2-binary
#### 멀티 스테이지 빌드를 통한 용량 최적화 이미지 크기를 줄이기 위해 빌드 단계와 실행 단계를 분리하는 멀티 스테이지(Multi-stage) 빌드 전략을 사용할 수 있습니다.
# 1단계: 빌드 스테이지
FROM apache/airflow:2.7.1 AS compile-image
USER root
RUN apt-get update && apt-get install -y build-essential
USER airflow
RUN pip wheel --no-cache-dir --wheel-dir /tmp/wheels cryptography

# 2단계: 최종 런타임 스테이지
FROM apache/airflow:2.7.1
COPY --from=compile-image /tmp/wheels /tmp/wheels
RUN pip install --no-cache-dir /tmp/wheels/*
### 운영 환경을 위한 환경 설정 #### 환경 변수 주입 Airflow의 동작 방식은 환경 변수를 통해 제어할 수 있습니다. Dockerfile 내에 미리 정의해두면 컨테이너 실행 시 별도의 설정 없이 바로 적용됩니다.
FROM apache/airflow:2.7.1

# DAG 로딩 타임아웃 및 예제 파일 로드 여부 설정
ENV AIRFLOW__CORE__DAGBAG_IMPORT_TIMEOUT=300
ENV AIRFLOW__CORE__LOAD_EXAMPLES=False

# 커스텀 설정 파일 복사
COPY config/airflow.cfg /opt/airflow/airflow.cfg
### 주요 문제 해결 및 팁 #### 종속성 충돌 방지 Airflow는 많은 내부 의존성을 가지고 있습니다. 설치 시 공식적으로 제공되는 `constraints` 파일을 활용하면 라이브러리 간의 버전 충돌을 방지할 수 있습니다.
ARG PYTHON_VERSION=3.10
RUN pip install --no-cache-dir \
    "apache-airflow==${AIRFLOW_VERSION}" \
    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt" \
    pandas numpy
#### 시간대(Timezone) 변경 서버의 시간대를 한국 시간(KST)으로 변경하려면 다음과 같이 설정합니다.
USER root
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime && \
    echo "Asia/Seoul" > /etc/timezone
USER airflow
커스텀 이미지를 활용하면 개발 환경과 운영 환경의 격차를 줄이고, 복잡한 데이터 파이프라인의 배포 프로세스를 표준화할 수 있습니다. 위 예시들을 기반으로 각 프로젝트의 특성에 맞는 최적화된 이미지를 구성해 보시기 바랍니다.

태그: ApacheAirflow docker DataEngineering DevOps python

8월 22일 21:46에 게시됨