로컬 환경(window)와 개발환경(linux)환경에서 사용하기 위해 airflow를 docker-compose 환경에서 구축하면서 작성한 포스팅입니다. 참조한 문서입니다
https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html
Running Airflow in Docker — Airflow Documentation
airflow.apache.org
1. docker compose.yml 다운로드
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.10.4/docker-compose.yaml'
airflow에서 제공하는 docker-compose.yaml을 받는다.
https://airflow.apache.org/docs/apache-airflow/2.10.4/docker-compose.yaml
docker-compose V1에서는 정확하게 작동하지 않을 수 있다고 한다.
linux에서 사용할 경우, group ID는 0으로 설정하고 호스트 ID는 airflow 환경 구성에 사용해야한다. 그렇지 않으면 dags, logs, plugin 파일이 모두 root 권한으로 생성된다고 한다.
mkdir -p ./dags ./logs ./plugins ./config
echo -e "AIRFLOW_UID=$(id -u)" > .env
다른 운영체제의 경우 AIRFLOW_UID을 설정하지 않는다 warning 메세지를 받을 수도 있는데, 크게 걱정하지 않아도 된다.(불편하면 .env파일에 AIRFLOW_UID를 생성할 것)
docker compose up airflow-init
docker-compose.yml에 있는 airflow-init 서비스를 우선 실행하여 설정 정보를 초기화한다.
airflow-init:
<<: *airflow-common
entrypoint: /bin/bash
# yamllint disable rule:line-length
command:
- -c
- |
if [[ -z "${AIRFLOW_UID}" ]]; then
echo
echo -e "\033[1;33mWARNING!!!: AIRFLOW_UID not set!\e[0m"
echo "If you are on Linux, you SHOULD follow the instructions below to set "
echo "AIRFLOW_UID environment variable, otherwise files will be owned by root."
echo "For other operating systems you can get rid of the warning with manually created .env file:"
echo " See: https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html#setting-the-right-airflow-user"
echo
fi
one_meg=1048576
mem_available=$$(($$(getconf _PHYS_PAGES) * $$(getconf PAGE_SIZE) / one_meg))
cpus_available=$$(grep -cE 'cpu[0-9]+' /proc/stat)
disk_available=$$(df / | tail -1 | awk '{print $$4}')
warning_resources="false"
if (( mem_available < 4000 )) ; then
echo
echo -e "\033[1;33mWARNING!!!: Not enough memory available for Docker.\e[0m"
echo "At least 4GB of memory required. You have $$(numfmt --to iec $$((mem_available * one_meg)))"
echo
warning_resources="true"
fi
if (( cpus_available < 2 )); then
echo
echo -e "\033[1;33mWARNING!!!: Not enough CPUS available for Docker.\e[0m"
echo "At least 2 CPUs recommended. You have $${cpus_available}"
echo
warning_resources="true"
fi
if (( disk_available < one_meg * 10 )); then
echo
echo -e "\033[1;33mWARNING!!!: Not enough Disk space available for Docker.\e[0m"
echo "At least 10 GBs recommended. You have $$(numfmt --to iec $$((disk_available * 1024 )))"
echo
warning_resources="true"
fi
if [[ $${warning_resources} == "true" ]]; then
echo
echo -e "\033[1;33mWARNING!!!: You have not enough resources to run Airflow (see above)!\e[0m"
echo "Please follow the instructions to increase amount of resources available:"
echo " https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html#before-you-begin"
echo
fi
mkdir -p /sources/logs /sources/dags /sources/plugins
chown -R "${AIRFLOW_UID}:0" /sources/{logs,dags,plugins}
exec /entrypoint airflow version
# yamllint enable rule:line-length
environment:
<<: *airflow-common-env
_AIRFLOW_DB_MIGRATE: 'true'
_AIRFLOW_WWW_USER_CREATE: 'true'
_AIRFLOW_WWW_USER_USERNAME: ${_AIRFLOW_WWW_USER_USERNAME:-airflow}
_AIRFLOW_WWW_USER_PASSWORD: ${_AIRFLOW_WWW_USER_PASSWORD:-airflow}
_PIP_ADDITIONAL_REQUIREMENTS: ''
user: "0:0"
volumes:
- ${AIRFLOW_PROJ_DIR:-.}:/sources
compose 파일의 airflow-init을 살펴보면 시스템 설정을 확인하여 compose 내의 환경 변수를 설정하는 것을 확인할 수 있다.
airflow-init-1 | [2025-01-11T06:42:33.244+0000] {override.py:1596} INFO - Added user airflow
airflow-init-1 | User "airflow" created with role "Admin"
airflow-init-1 | 2.10.4
airflow-init-1 exited with code 0
실행시 airflow 이라는 admin 계정이 생성된 것을 확인할 수 있다.
2. 실행
docker compose up
compose 명령어를 통해 실행해보자
8080포트에 접속하면 ui를 확인할 수 있고, 아이디, 비밀번호 모두 airflow으로 root 계정으로 접속할 수 있다.
3. 의존성 라이브러리 추가
dag를 실습하던중에 라이브러리를 인식하지 못하는 문제를 확인하였다.
https://github.com/apache/airflow/discussions/30154
Discord Operator? · apache airflow · Discussion #30154
Is the Discord Operator no longer functioning? I've been trying to import it but keep getting a ModuleNotFoundError: No module named 'airflow.providers.discord'
github.com
사용중인 airflow 이미지는 일부 라이브러리만 포함되어 있지 때문에, 추가적으로 라이프러리를 추가하려면 DockerFile을 직접생성해야한다.
FROM apache/airflow:2.10.4
ADD requirements.txt .
RUN pip install apache-airflow==2.10.4 -r requirements.txt
requirement.txt 를 작성한다.
attrs==24.2.0
certifi==2024.8.30
cffi==1.17.1
dnspython==2.6.1
exceptiongroup==1.2.2
h11==0.14.0
idna==3.10
outcome==1.3.0.post0
pycparser==2.22
pymongo==4.10.1
PySocks==1.7.1
selenium==4.27.1
sniffio==1.3.1
sortedcontainers==2.4.0
trio==0.27.0
trio-websocket==0.11.1
typing_extensions==4.12.2
urllib3==2.2.3
websocket-client==1.8.0
wsproto==1.2.0
apache-airflow-providers-discord>=1.0.1
docker-compose 에서도 사용하는 &airflow-common alias에 image 부분을 수정한다
x-airflow-common:
&airflow-common
# In order to add custom dependencies or upgrade provider packages you can use your extended image.
# Comment the image line, place your Dockerfile in the directory where you placed the docker-compose.yaml
# and uncomment the "build" line below, Then run `docker-compose build` to build the images.
# image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.10.4}
build: .
docker container안에서 라이브러리를 확인할 수 있다.
4. Pycharm 디버그
Pycharm 환경에서 airflow 관련 라이브러리(XXOperator)를 인식하지 못하기 때문에 디버깅에 어려움이 있다. docker-compose를 통해 디버그를 설정할 수 있다.
airflow-python:
<<: *airflow-common
profiles:
- debug
environment:
<<: *airflow-common-env
user: "50000:0"
entrypoint: [ "/bin/bash", "-c" ]
service 하단에 airflow-python을 추가한다.
인터프리터 설정에 docker-compose를 추가하여 serivice중에 airflow-python을 선택한다.
pycharm에서 빨간줄없이 제대로 인식됨을 확인할 수 있다.
'사이드 프로젝트' 카테고리의 다른 글
[Github Action] 로컬환경에서 Github Action 테스트하기 (2) | 2025.04.10 |
---|---|
[아워메뉴] ERD 설계 (엔티티 설계) (2) | 2025.02.08 |
2024 KUIT 프로젝트 회고 (5) | 2024.08.30 |
네이버 지도 크롤링하기 (6) | 2024.08.15 |
JPA 일대일 연관관계에서 지연로딩이 적용되지 않는 이유 (0) | 2024.01.22 |