
기존 airflow 이미지 위에 GDAL 바이너리를 설치하고,
추가로 gdal python binding 도 설치하는 Dockerfile 을 작성해봤습니다.
FROM apache/airflow:2.10.5-python3.12
# 사실 버전 호환성은 정확히 몰라서 그냥 GDAL, PROJ 모두 최신으로 받았습니다.
# 최신 버전은 아래 링크를 참조하시기 바랍니다.
# GDAL 라이브러리 목록: https://download.osgeo.org/gdal/
# PROJ 라이브러리 목록: https://download.osgeo.org/proj/
ARG GDAL_VERSION=3.11.1
ARG PROJ_VERSION=9.6.2
# 잠시 GDAL+PROJ 설치를 위한 임시 디렉토리, 설치가 모두 끝나면 지울 예정입니다.
ARG INSTALLATION_PATH=/gdal_proj_install
USER root
RUN apt-get update && \
apt-get install --no-install-recommends -y \
build-essential \
libpq-dev \
libgeos-dev \
curl \
sqlite3 \
cmake \
libtiff-dev \
libsqlite3-dev \
libcurl4-openssl-dev \
pkg-config swig
WORKDIR ${INSTALLATION_PATH}
# PROJ Source Download , build, system-wide install
RUN curl https://download.osgeo.org/proj/proj-${PROJ_VERSION}.tar.gz | tar -xz && \
cd proj-${PROJ_VERSION} && \
mkdir build && \
cd build && \
cmake .. && \
cmake --build . && \
cmake --build . --target install
# GDAL Source Download , build, system-wide install
RUN curl https://download.osgeo.org/gdal/${GDAL_VERSION}/gdal-${GDAL_VERSION}.tar.gz | tar -xz
WORKDIR ./gdal-${GDAL_VERSION}
RUN mkdir build && cd build && \
cmake .. -DBUILD_PYTHON_BINDINGS=OFF -DGDAL_USE_POSTGRESQL=ON -DCMAKE_BUILD_TYPE=Release && \
cmake --build . && \
cmake --build . --target install && \
ldconfig
# airflow 이미지에서 본래 사용되던 WORKDIR 로 원상복구
WORKDIR ${AIRFLOW_HOME}
# 설치 완료했으므로 GDAL, PROJ Source Directory 삭제
RUN rm -rf ${INSTALLATION_PATH}
# 나머지 쓸데없는 것들 삭제
RUN apt-get autoremove -yqq --purge && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# airflow 이미지에서 본래 사용되던 USER 로 원상복구
USER airflow
# (선택사항) python gdal bind 사용하고 싶으신 분들을 pip install GDAL
RUN pip install GDAL==`gdal-config --version`
생성한 이미지를 컨테이너로 띄워서
gdal 이 정상적으로 설치됐는지 확인해보겠습니다.
주의! 이 Dockerfile 을
docker build하면 상당 시간이 소요됩니다.
혹여 바쁘신 분들은 제가 만들어둔docker image를 사용하시면 됩니다.
docker pull vitaminc1/airflow-gdal:2.10.5-python3.12
# 참고: Window 10 환경에서 작업했습니다.
docker build -t airflow-gdal .
docker run --name airflow-gdal -itd airflow-gdal bash
docker exec -it airflow-gdal bash
## docker 내부로 접속한 상태
gdalinfo --version # 설치 및 버전 확인
## python 내부에서 gdal 라이브러리 import 확인
## (pip install GDAL==`gdal-config --version` 를 수행하신 분들만 하세요!)
python
from osgeo import gdal # 에러가 안 나면 성공
from osgeo import ogr # 에러가 안 나면 성공
exit()
