본문으로 건너뛰기

Docker로 GDAL 간편하게 사용하기

· 약 10분
Jeongyong Park
쌍팔년생 개발자

GDAL(Geospatial Data Abstraction Library)은 지리공간 데이터 처리를 위한 강력한 라이브러리입니다. 하지만 Windows 환경에서 직접 설치하면 복잡한 컴파일 과정과 의존성 문제로 어려움을 겪을 수 있습니다.

기존 설치 방법의 문제점:

  • 복잡한 컴파일 과정과 의존성 관리
  • Visual Studio 버전 호환성 문제
  • 32bit/64bit 아키텍처 충돌
  • DLL과 라이브러리 경로 설정의 어려움

Docker를 사용하면 이런 문제 없이 몇 분 만에 GDAL을 사용할 수 있습니다. 이 글에서는 Docker를 활용한 GDAL 사용법부터 실제 업무에서 활용할 수 있는 다양한 예제까지 다뤄보겠습니다.

TL;DR: Docker를 사용하면 복잡한 GDAL 설치 과정 없이 ghcr.io/osgeo/gdal:alpine-small 이미지로 간편하게 지리공간 데이터를 처리할 수 있습니다. 볼륨 마운트로 로컬 파일에 접근하고 다양한 GDAL 도구를 활용하세요.

Docker 사용의 장점:

  • 간편한 설치: 컴파일 과정 불필요
  • 일관된 환경: 운영체제 무관하게 동일한 실행 환경
  • 빠른 배포: 사전 빌드된 이미지 즉시 사용
  • 격리된 환경: 시스템에 영향 없는 독립 실행

Docker에서 GDAL 이미지 찾기

GitHub Container Registry에서 공식 GDAL 이미지를 제공합니다.

dockerhub.jpg

ghcr.io/osgeo/gdal 이미지를 선택하는 것이 좋습니다:

공식 이미지 선택 이유:

  • 공식 지원: OSGeo에서 직접 관리하는 공식 이미지
  • 높은 신뢰성: 활발한 업데이트와 커뮤니티 지원
  • 다양한 버전: 여러 태그와 변형 버전 제공

dockerhub-2.jpg

적절한 GDAL 이미지 선택하기

Docker 이미지 선택 시 태그를 신중하게 고려해야 합니다.

osgeo-gdal-latest.jpg

이미지 유형별 특징

이미지 유형크기특징권장 용도
ubuntu-full~1.5GB모든 드라이버 포함복잡한 데이터 처리
ubuntu-small~800MB주요 드라이버만 포함일반적인 용도
alpine-normal~200MBAlpine 기반, 대부분 드라이버균형잡힌 선택
alpine-small~20MB최소 드라이버만 포함경량화 우선

latest 이미지의 단점:

  • 큰 용량: Ubuntu 기반으로 압축 상태에서도 936MB
  • 실행 시 용량: 압축 해제 후 수 GB의 디스크 공간 사용
  • 느린 다운로드: 네트워크 대역폭과 시간 소모

Alpine Linux 기반 이미지 권장

Ubuntu가 필요하지 않다면 Alpine Linux 기반 이미지를 사용하는 것이 효율적입니다.

osgeo-gdal-tags.jpg

Alpine 이미지의 장점:

  • alpine-small: 약 20MB의 경량 크기
  • 빠른 다운로드: Ubuntu 대비 95% 용량 절약
  • 동일한 성능: GDAL 기능에 전혀 지장 없음
  • 보안 최적화: Alpine Linux의 보안 특화 설계

버전 고정의 중요성

버전 관리 주의사항

프로덕션 환경에서는 특정 버전을 명시하는 것이 좋습니다:

  • API 안정성: GDAL 버전 업데이트 시 매개변수 변경 가능성
  • 호환성 보장: 기존 스크립트와의 호환성 유지
  • 재현성: 동일한 환경에서의 일관된 결과

예시: ghcr.io/osgeo/gdal:alpine-small-3.9.0

Docker GDAL 기본 사용법

Docker 실행 명령어 구조

Docker 실행 기본 구조
docker run [실행 파라미터] [도커이미지명:태그명] [컨테이너 안에서 실행할 명령들]

주요 실행 파라미터:

  • -it: 대화형 터미널 모드
  • --rm: 컨테이너 종료 후 자동 삭제
  • -v: 볼륨 마운트 (로컬 폴더와 컨테이너 폴더 연결)
  • -w: 작업 디렉토리 설정
  • -e: 환경 변수 설정

볼륨 마운트 설정

Docker 컨테이너는 독립된 Linux 환경에서 실행됩니다. 로컬 파일에 접근하려면 볼륨 마운트가 필요합니다.

파일 시스템 분리:

  • 컨테이너: 독립된 Linux 파일 시스템
  • 로컬: Windows 파일 시스템 (C:, D: 드라이브)
  • 해결책: 볼륨 마운트로 두 공간 연결
볼륨 마운트 문법
# Windows
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 [명령어]

# macOS/Linux
docker run -it --rm -v /home/user/data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 [명령어]

실제 GDAL 도구 활용하기

1. gdalinfo - 파일 정보 확인

기본 파일 정보 확인
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdalinfo /workspace/sample.tif
상세 정보 확인
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdalinfo -stats -hist -checksum /workspace/sample.tif

gdalinfo-1.jpg

2. gdal_translate - 파일 형식 변환

TIFF를 PNG로 변환
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdal_translate -of PNG /workspace/input.tif /workspace/output.png
압축 옵션과 함께 변환
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdal_translate -of GTiff -co COMPRESS=LZW -co TILED=YES \
/workspace/input.tif /workspace/compressed.tif
특정 밴드만 추출
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdal_translate -b 1 -b 2 -b 3 /workspace/multispectral.tif /workspace/rgb.tif

3. gdalwarp - 좌표계 변환 및 리프로젝션

좌표계 변환
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdalwarp -t_srs EPSG:4326 /workspace/input.tif /workspace/wgs84.tif
리샘플링과 함께 변환
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdalwarp -t_srs EPSG:3857 -r bilinear -tr 10 10 \
/workspace/input.tif /workspace/webmercator.tif
여러 파일 모자이크
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdalwarp /workspace/tile1.tif /workspace/tile2.tif /workspace/tile3.tif \
/workspace/mosaic.tif

4. gdalbuildvrt - 가상 래스터 생성

여러 파일을 하나의 VRT로 결합
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdalbuildvrt /workspace/mosaic.vrt /workspace/*.tif
해상도별 오버뷰 생성
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdalbuildvrt -resolution highest /workspace/high_res.vrt /workspace/*.tif

5. gdaldem - 지형 분석

경사도 계산
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdaldem slope /workspace/dem.tif /workspace/slope.tif
음영기복도 생성
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdaldem hillshade -z 2 -s 1 /workspace/dem.tif /workspace/hillshade.tif
등고선 생성
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdal_contour -a elevation -i 10 /workspace/dem.tif /workspace/contours.shp

6. gdal_calc.py - 래스터 계산

NDVI 계산 (밴드 4: NIR, 밴드 3: Red)
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdal_calc.py -A /workspace/multispectral.tif --A_band=4 \
-B /workspace/multispectral.tif --B_band=3 \
--outfile=/workspace/ndvi.tif --calc="(A-B)/(A+B)"
래스터 마스킹
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdal_calc.py -A /workspace/input.tif -B /workspace/mask.tif \
--outfile=/workspace/masked.tif --calc="A*B"

벡터 데이터 처리 (OGR)

1. ogrinfo - 벡터 파일 정보 확인

Shapefile 정보 확인
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
ogrinfo /workspace/boundaries.shp
상세 정보와 속성 확인
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
ogrinfo -al -so /workspace/boundaries.shp

2. ogr2ogr - 벡터 데이터 변환

Shapefile을 GeoJSON으로 변환
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
ogr2ogr -f GeoJSON /workspace/output.geojson /workspace/input.shp
좌표계 변환과 함께
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
ogr2ogr -f GeoJSON -t_srs EPSG:4326 \
/workspace/wgs84.geojson /workspace/input.shp
속성 필터링
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
ogr2ogr -f GeoJSON -where "POPULATION > 100000" \
/workspace/large_cities.geojson /workspace/cities.shp

실제 업무 시나리오

시나리오 1: 위성영상 전처리 파이프라인

1. 원본 영상 정보 확인
docker run -it --rm -v c:\satellite:/data ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdalinfo /data/landsat8_raw.tif
2. 좌표계를 UTM으로 변환
docker run -it --rm -v c:\satellite:/data ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdalwarp -t_srs EPSG:32652 -r cubic \
/data/landsat8_raw.tif /data/landsat8_utm.tif
3. RGB 밴드만 추출하여 압축
docker run -it --rm -v c:\satellite:/data ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdal_translate -b 4 -b 3 -b 2 -of GTiff -co COMPRESS=JPEG -co QUALITY=85 \
/data/landsat8_utm.tif /data/landsat8_rgb.tif

시나리오 2: DEM 데이터 분석

1. 여러 DEM 타일 병합
docker run -it --rm -v c:\dem:/data ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdalbuildvrt /data/merged_dem.vrt /data/dem_*.tif
2. 병합된 DEM을 단일 파일로 변환
docker run -it --rm -v c:\dem:/data ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdal_translate -of GTiff -co COMPRESS=LZW \
/data/merged_dem.vrt /data/merged_dem.tif
3. 경사도와 음영기복도 생성
docker run -it --rm -v c:\dem:/data ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdaldem slope /data/merged_dem.tif /data/slope.tif

docker run -it --rm -v c:\dem:/data ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdaldem hillshade -z 2 /data/merged_dem.tif /data/hillshade.tif

시나리오 3: 배치 처리 스크립트

Windows 배치 파일 (process_images.bat)
@echo off
set IMAGE_NAME=ghcr.io/osgeo/gdal:alpine-small-3.9.0
set DATA_DIR=c:\gis_data

echo 이미지 처리 시작...

for %%f in (%DATA_DIR%\*.tif) do (
echo 처리 중: %%f
docker run --rm -v %DATA_DIR%:/data %IMAGE_NAME% ^
gdal_translate -of GTiff -co COMPRESS=LZW "%%f" "/data/compressed_%%~nf.tif"
)

echo 처리 완료!

성능 최적화 팁

1. 메모리 설정

메모리 캐시 크기 설정
docker run -it --rm -v c:\data:/workspace \
-e GDAL_CACHEMAX=512 \
ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdalwarp -wm 1024 /workspace/large_file.tif /workspace/output.tif

2. 멀티스레딩 활용

멀티스레드 처리
docker run -it --rm -v c:\data:/workspace \
-e GDAL_NUM_THREADS=ALL_CPUS \
ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdalwarp -multi /workspace/input.tif /workspace/output.tif

3. 타일링 최적화

타일 크기 최적화
docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdal_translate -of GTiff -co TILED=YES -co BLOCKXSIZE=512 -co BLOCKYSIZE=512 \
/workspace/input.tif /workspace/tiled.tif

문제 해결 가이드

자주 발생하는 문제들

1. 권한 문제

문제: 컨테이너에서 생성된 파일에 접근할 수 없음

해결책: 사용자 ID 매핑 사용

docker run -it --rm -v c:\data:/workspace \
--user $(id -u):$(id -g) \
ghcr.io/osgeo/gdal:alpine-small-3.9.0 [명령어]

2. 메모리 부족

문제: 대용량 파일 처리 시 메모리 부족

해결책:

  1. Docker 메모리 제한 증가
  2. GDAL 캐시 크기 조정
  3. 타일 단위 처리
docker run -it --rm -m 4g -v c:\data:/workspace \
-e GDAL_CACHEMAX=1024 \
ghcr.io/osgeo/gdal:alpine-small-3.9.0 [명령어]

3. 좌표계 오류

문제: 좌표계 정보가 없거나 잘못됨

해결책: 명시적 좌표계 지정

docker run -it --rm -v c:\data:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdalwarp -s_srs EPSG:4326 -t_srs EPSG:3857 \
/workspace/input.tif /workspace/output.tif

디버깅 팁

상세 로그 출력
docker run -it --rm -v c:\data:/workspace \
-e CPL_DEBUG=ON \
ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdalinfo /workspace/problematic.tif
지원되는 형식 확인
docker run -it --rm ghcr.io/osgeo/gdal:alpine-small-3.9.0 \
gdalinfo --formats

고급 활용법

1. Docker Compose 활용

docker-compose.yml
version:'3.8'
services:
gdal:
image: ghcr.io/osgeo/gdal:alpine-small-3.9.0
volumes:
- ./data:/workspace
working_dir: /workspace
environment:
- GDAL_CACHEMAX=512
- GDAL_NUM_THREADS=ALL_CPUS
command: tail -f /dev/null # 컨테이너 유지
사용법
docker-compose up -d
docker-compose exec gdal gdalinfo /workspace/sample.tif
docker-compose down

2. 별칭(Alias) 설정

Linux/macOS (.bashrc 또는 .zshrc)
alias dgdal='docker run -it --rm -v $(pwd):/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0'
alias dgdalinfo='dgdal gdalinfo'
alias dgdaltranslate='dgdal gdal_translate'
alias dgdalwarp='dgdal gdalwarp'
Windows (doskey 명령어)
doskey dgdal=docker run -it --rm -v %cd%:/workspace ghcr.io/osgeo/gdal:alpine-small-3.9.0 $*
doskey dgdalinfo=dgdal gdalinfo $*

3. 사용자 정의 이미지 생성

Dockerfile
FROM ghcr.io/osgeo/gdal:alpine-small-3.9.0

# 추가 패키지 설치
RUN apk add --no-cache python3 py3-pip

# Python 라이브러리 설치
RUN pip3 install numpy rasterio

# 작업 디렉토리 설정
WORKDIR /workspace

# 사용자 정의 스크립트 복사
COPY scripts/ /usr/local/bin/

# 실행 권한 부여
RUN chmod +x /usr/local/bin/*

결론

Docker GDAL 사용의 핵심 장점:

  • 설치 간소화: 복잡한 컴파일 과정 생략
  • 환경 독립성: 시스템 설정에 영향 없음
  • 일관된 결과: 운영체제 무관하게 동일한 실행 환경
  • 즉시 사용: 몇 분 만에 GDAL 활용 가능
  • 확장성: 필요에 따라 사용자 정의 이미지 생성 가능

Docker를 활용하면 GDAL 설치의 복잡함을 해결하고 지리공간 데이터 처리에 집중할 수 있습니다. 이 글에서 소개한 다양한 예제와 팁들을 활용하여 효율적인 GIS 워크플로우를 구축해보세요.

참고 자료

📢 AdSense 광고 영역로딩 중...

💬 댓글 시스템