본문 바로가기
Programming

Airflow Docker Volume 마운트하기

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

Airflow Docker Volume 마운트하기

Airflow Docker에 volume을 마운트 하는 방법을 정리합니다. 도커는 컨테이너가 삭제되면 데이터도 같이 삭제됩니다. 지속적으로 저장이 필요한 파일을 관리한다면 도커 컨테이너의 생명 주기와 무관하게 파일을 저장할 수 있도록 설정이 필요합니다.

도커 볼륨 마운트

도커 컨테이너가 파일을 저장할 수 있도록 `도커 영역`의 외부 볼륨을 마운트하여 사용합니다. 이를 위해서 위의 그림과 같이 컨테이너가 생성될 때 파일시스템을 마운트 할 수 있도록 airflow의 docker-compose.yml파일을  수정해야 합니다.

Airflow 컨테이너 구조

Airflow 홈페이지에서 Airflow 실행을 위한 서버, DB 컨테이너를 구성하기 위한 'docker-compose.yml`파일을 제공합니다.v 파일에는 컨테이너 내부의 airflow 폴더는 도커가 실행되는 Filesystem의 `~/airflow`폴더와 연결하기 위한 volume 마운트에 대한 정보를 저장합니다.

// docker-compose.yml
...
volume:
  -${AIRFLOW_PROJ_DIR:-.}/dags:/opt/airflow/dags
  -${AIRFLOW_PROJ_DIR:-.}/logs:/opt/airflow/logs
  -${AIRFLOW_PROJ_DIR:-.}/config:/opt/airflow/config
  -${AIRFLOW_PROJ_DIR:-.}/plugins:/opt/airflow/plugins
...

코드를 보면 위와 같이 airflow에서 필요한 각각의 폴더를 mount하기 위한 위치 정보가 저장되어 있습니다. 컨터이네 내부의 `dags`, `logs`, `configs`, `plugins` 각 폴더는 컨테이너를 실행시키는 파일시스템의 위치에 생성되어 사용됩니다. 자신의 서버에 위치한 `~/airflow/dags`폴더에 생성한 dag 파일을 컨테이너 내부의 airflow에서 인식이 가능합니다.

신규 볼륨 추가하기

컨테이너가 삭제되어도 유지가 필요한 파일을 저장하기 위해서 추가로 새로운 볼륨을 마운트합니다. 

// docker-compose.yml
...
volume:
  -${AIRFLOW_PROJ_DIR:-.}/dags:/opt/airflow/dags
  -${AIRFLOW_PROJ_DIR:-.}/logs:/opt/airflow/logs
  -${AIRFLOW_PROJ_DIR:-.}/config:/opt/airflow/config
  -${AIRFLOW_PROJ_DIR:-.}/plugins:/opt/airflow/plugins
  -${AIRFLOW_PROJ_DIR:-.}/plugins:/opt/airflow/mount

위의 코드에서는 `mount`폴더 이름으로 볼륨을 마운트 했습니다. 새로 생성한 mount폴더가 `root` 권한으로 생성되는 경우 파일 저장 permission이 없다는 에러가 나오면서 볼륨에 파일을 저장할 수 없습니다. 이 경우 docker composer파일에서 airflow가 실행되는 초기에 볼륨 마운트 권한을 수정하는 위치에 `mount`폴더를 추가합니다. 이제 실행된 airflow 컨테이너의 bash로 접속해서 새롭게 생성된 mount 폴더의 권한을 확인합니다.

sudo docker ps -a
---------------------
CONTAINER ID IMAGE
0fssf????    apache/airflow:2.6.3 ...

실행된 도커의 containerID를 확인하기 위해서 `sudo docker ps -a` 명령을 실행합니다.

sudo docker exec -it 0fdd8a4b983c /bin/bash
default@0fssf????:/opt/airflow$ ls
...
drwxrwxf-x 2 default root 4096 mount
...

새로운 mount 폴더가 생성되었고 컨테이터를 실행한 서버의 `~/airflow` 폴더에서도 마운트한 폴더를 확인할 수 있습니다.

반응형