Docker를 이용하여 gdal 사용하기
May 21, 2021
언젠가 윈도우에서 gdal을 사용하기 위해서 소스를 내려받고 CMake로 VC 프로젝트로 만들고 Visual C++에서 열어보니 막상 Visual Studio 버전이 안 맞거나 DLL이랑 라이브러리랑 헤더 파일이 없어 코드 창이 온통 빨간색을 뒤덮였었고 어찌어찌 구글에서 검색해서 라이브러리랑 헤더 파일 찾아서 프로젝트 설정 창에서 링크 걸어주고 어찌어찌 컴파일하면 32bit 64bit 때문에 또 삽질하면서 힘겹게 몇 시간씩 허비했던 시절이 있었다.
하지만 시대가 좋아져서 가상화와 도커라는 물건이 나타났고 이젠 운영체제와 상관없이 도커만 설치하면 필요한 프로그램을 Docker hub에서 검색해서 몇 분 만에 사용할 수 있는 시대가 되었다.
더이상 프로그램 하나 쓰자고 컴파일하고 라이브러리 다운로드받으러 돌아다니지 말고 남들이 차려 놓은 밥상에 숟가락을 얹어서 편히 사용하자.
Docker hub 에서 gdal 이미지 찾기
먼저, Dockerhub 에서 gdal을 검색을 해보자.
gdal을 한번이라도 써봤다면 당연하게도 gdal이 osgeo에서 관리한다는걸 알고 있을테고 모른다고 하더라도 다운로드 수가 압도적으로 많고 가장 위에 있는 osgeo의 osgeo/gdal 이미지가 가장 잘 관리되고 많이 사용되고 있다는것을 직감적으로 알 수 있다.
그러면 osgeo/gdal을 클릭하면 해당 이미지의 소개 페이지와 간단한 사용법, 해당 이미지의 소스코드 저장소(github) 등이 정리된 화면이 나타난다.
화면 속 Docker Pull Command 처럼 해당 이미지를 본인의 컴퓨터로 pull 해서 사용하면 된다.
나에게 맞는 gdal 이미지는?
하지만 여기까지만 알고 그냥 넘어간다면 초보자에 머물게 된다. 특정 버전을 지칭하는 Tag를 명시하지 않으면 Docker는 기본적으로 latest Tag를 기본값으로 요청을 하게 된다. osgeo/gdal의 latest 이미지는 전체 설치판 우분투 리눅스의 이미지를 베이스로 gdal을 컴파일하여 사용할 수 있게 만들어 놓은 가장 기본적이고 누구나 무난하게 사용 할 수 있도록 osgeo 측에서 대표 버전으로 지정해 놓은 것이다.
하지만 누구나 무난하게 사용하기 위해 전체 설치판 우분투 환경으로 베이스로 만든 이 버전은 압축된 이미지 파일만 936.14MB로 컴퓨터에서 실행할 수 있는 상태로 만들어 놓으면 순식간에 수 기가바이트의 하드디스크의 용량을 차지해 버리게 된다.
그 때문에 본인이 우분투가 필요한 경우가 아니라면 우분투 기반 gdal 도커 이미지가 아닌 알파인 리눅스 기반 gdal 도커 이미지를 사용할 것을 권장한다.
osgeo/gdal 도커 이미지 정보 화면에서 Tags 탭으로 이동하여 alpine을 검색하면 화면 처럼 alpine-small-latest, alpine-ultrasmall-latest 등의 이미지들이 20MB 언저리의 파일 크기로 되어 있는 것을 확인 할 수 있다. 좀전의 우분투 기반의 기본 latest 이미지가 900MB 이상이었던 것을 생각하면 놀라울 정도로 줄어든 파일 사이즈이지만 이 alpine 이미지 기반의 초 소용량 이미지들도 gdal 프로그램의 기능에 지장 없이 제 성능을 발휘하는 정상적인 이미지이다.
그리고 항상 최신의 버전이 필요한 상황이 아나라 특정 프로그램의 구성요소로서 사용되거나 배치 프로그램등을 구성할 때에는 gdal의 버전이 명시된 tags를 고르는 쪽이 좋다. gdal의 버전이 올라감에 따라 갑작스레 파라미터가 변경될 여지가 있기 때문이다.
윈도우에서 docker로 gdalinfo 사용해보기
docker 이미지를 실행 시키려면 다음과 같이 docker run 명령을 구동해야하는데 일단 지금은 실행 파라미터로 ‘-it —rm’ 을 넣어 주는 것을 무작정 외우자. 이것은 컨테이너 속 프로그램과의 입출력과 프로그램 종료후 자동으로 인스턴스를 삭제해주는 옵션이다.
# 예시
docker run [실행 파라미터] [도커이미지명:태그명] [컨테이너 안에서 실행할 명령들]
일단 터미널(명령프롬프트)에서 다음의 명령을 입력하여 gdalinfo의 사용법을 출력해보자.
docker run -it --rm osgeo/gdal:alpine-ultrasmall-3.3.0 /usr/bin/gdalinfo
위에서의 gdalinfo 프로그램은 도커의 가상환경속 리눅스 컴퓨터에서 실행되므로 본인의 컴퓨터의 C드라이브, D드라이브와 가상환경속 gdal이 실행되는 파일공간은 엄밀히 다른 공간이다. 따라서 gdal이 돌아가는 가상의 공간에서 본인의 컴퓨터의 C:\Temp 폴더속 파일들을 사용할 수있는 차원의 문을 만들어 주어야 한다. 이를 Volume Mapping 또는 Volume sharing 이라고 부른다. 실행파라미터 부분에 -v 와 함께 [로컬 컴퓨터의 경로]:[가상 컴퓨터의 경로] 를 콜론(:)으로 이어 붙여서 입력해주면된다.
# 예시
docker run -it --rm -v c:\temp:/data [도커이미지명:태그명] [컨테이너 안에서 실행할 명령들]
터미널(명령프롬프트)에서 다음의 명령을 입력하여 gdalinfo 프로그램으로 로컬 컴퓨터의 C:\Temp 폴더 밑의 dtm.tif 파일의 메타 정보를 확인하여 보자.
docker run -it --rm -v c:\temp:/data osgeo/gdal:alpine-ultrasmall-3.3.0 /usr/bin/gdalinfo /data/dtm.tif
이렇게 gdal을 이용하여 내 컴퓨터의 윈도우에서 geotiff 파일의 메타정보를 확인하여 봤다. gdalinfo 뿐 아니라 gdal_translate 와 gdal_wrap도 동일한 방법으로 활용할 수 있으니. 앞으로 윈도우든 리눅스든 로컬의 운영체제에 gdal설치로 인해 시스템 폴더들을 더렵히지 말고 도커를 이용하여 깔끔하고 가볍게 gdal을 활용할 수 있기를 기대한다.