데이터 공부/Apache Airflow

Docker airflow2 커스텀 이미지 빌드 과정

한소희DE 2022. 4. 2. 23:17
앞서, 기존에 생성된 이미지만을 이용해서 airflow 를 빌드했었는데, 오늘은 airflow 이미지 자체를 직접 빌드해보도록 하겠다.
왜 직접 빌드해야 하는지에 대한 이유와 공식 문서 소개, 그리고 airflow2 image 빌드 과정을 포스팅하겠다.

 

 

목차

airflow2 커스텀 이미지 빌드의 필요성

airflow2 이미지 빌드

공식 문서

 


 

 

 

01. airflow2 커스텀 이미지 빌드의 필요성

 

여담이지만 회사 면접을 봤을 당시, airflow를 도커로 띄워서 작은 프로젝트를 운영해 본 경험이 있다고 말씀드렸다.
이때 사수님께서 이미지 빌드 과정에 대해서 상세히 여쭤보았던 기억이 나는데, 이때 나는 이미 빌드되어져 있는 이미지를 활용해서 운영했었다라고 대답했던 기억이 난다. 그래서, 기회가 된다면 이미지부터 직접 빌드해서 환경을 구축해보고 싶다는 생각을 줄곧 해왔었다.

 

airflow 의 커스텀 이미지 필요성 대표 2가지는 아래와 같다.

 

첫 번째, 필요한 이미지의 기능만 구현할 수 있다.

Apache Airflow 에서는 공식 Docker 이미지를 제공한다. 이 이미지에는 60개 이상의 추가 기능이 설치되어 있다고 한다. 그런데, 우리는 사실 이 모든 기능이 필요치 않다.

 

두 번째, 내가 필요한 추가 기능을 원활하게 추가할 수 있다.

앞서, 공식 이미지에는 60개 이상의 추가 기능이 설치되어 있다고 설명한 바 있다. 하지만 우리는, 이 60여 개 이상의 기능 외에도 추가로 필요한 기능이 있을 수 있다. 그러면 우리는 또 직접 추가해야 하는데, 그러면 특정 요구사항이 있는 다른 이미지가 필요하게 된다.

 

 

따라서 우리는 도커 이미지를 직접 구현하는 것이, 원하는 특정 기능만 추가하여 이미지를 빌드 및 배포 / 운영할 수 있는 좋은 방법이 될 것이다.

 

 

공식 문서 설명은 아래와 같다.

출처: https://airflow.apache.org/docs/docker-stack/build.html

 

 

 

 

 

02. airflow2 이미지 빌드

이제 이미지를 직접 빌드해보자.

우선 airflow 환경을 구축할 폴더를 생성해준다. 나는 airflow_test 라는 폴더를 만들어주었다.

 

mkdir airflow_test

 

이제 그 airflow_test 폴더에, dag 파일을 담아 줄 dags 폴더도 생성해준다.

 

cd airflow_test
mkdir dags

 

그리고, airflow_test 폴더에 requirements.txt를 생성하여, airflow 내부에 설치해 줄 install 목록을 만들어준다.

우선은 빈 칸으로 생성해준다. 

 

vi requirements.txt

 

아니면 만약 내가 설치한 목록들을 airflow에 넣고 싶다면, 아래와 같이 txt 파일을 생성해준다.

pip freeze > requirements.txt

 

 

airflow_test 에 Dockerfile 파일을 생성해준다.

vi Dockerfile

 

이제 해당 폴더에 담길 이미지를 작성해주자. 이때 나는 공식 문서를 참고하여 이미지를 구축했다. 

도커 파일을 쪼개어 설명하도록 하겠다.

 

 

2-1. 기반이 되는 이미지를 가져오기 & maintainer 라벨 달기

FROM apache/airflow:2.2.4-python3.8
USER root
LABEL maintainer="hansohee"

 

2-2. apt dependencies 설치
RUN apt-get update \
  && apt-get install -y --no-install-recommends \
         vim \
  && apt-get autoremove -yqq --purge \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*

 

2-3. airflow user 변경

USER airflow

 

2-4. dag 파일 복사

COPY ./dags /opt/airflow/dags

 

2-5. requirement 복사 및 설치

COPY requirements.txt ./requirements.txt
RUN pip3 install -r requirements.txt

 

 

 

이로써, 기본적인 airlfow2 커스텀 이미지가 완성됐다.

이제 아래 도커 빌드 명령어를 주어 도커 이미지를 빌드한다. 참고로, 해당 이미지 빌드 시 꽤나 많은 시간이 소요된다.

 

docker build --no-cache -t hansohee/test_airflow:0.0.1 .

해당 명령어의 옵션 설명은 아래와 같다.

  • --no-cache: 캐시 없이 이미지를 빌드하라는 의미
  • -t : 이미지 tag 설정. 따라서 해당 명령어는 컨테이너명 hansohee & 이미지명 test_airflow & 태그 0.0.1 로 설정한다는 의미

 

 

빌드가 정상적으로 완료가 되면, 아래와 같이 설치 리스트가 파란색으로 보이며 export 된다 !

 

 

 

03. 공식 문서

 

공식 문서 링크는 아래와 같다.

https://airflow.apache.org/docs/docker-stack/build.html

 

Building the image — docker-stack Documentation

 

airflow.apache.org

 

 

 

 

이로써 가장 기본적인 틀의 airflow2 이미지 빌드가 마무리되었다.

다음 포스팅들에서는 해당 이미지를 docker-compose 를 활용하여 run 해보는 것을 진행해보도록 하겠다.