공식 GDAL 이미지로 GDAL 쉽게 시작하기 (feat. Docker)

식빵·2025년 1월 12일
0

GIS

목록 보기
8/14
post-thumbnail

😅 급하신 분들은 이것만 보세요


🐳 Dockerfile 작성

아무 디렉토리 하나 만들고 안에 들어가서 아래와 같이 Dockerfile 을 작성합니다.

# 태그목록: https://github.com/osgeo/gdal/pkgs/container/gdal/versions?filters%5Bversion_type%5D=tagged
FROM ghcr.io/osgeo/gdal:ubuntu-small-latest

# 한글도 읽기/쓰기가 가능토록 함
ENV LANG=C.UTF-8

# Timezone 을 우리나라에 맞춤
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

# 더 필요한 게 있으면 아래 추가 작성.
# RUN apt update && apt-get install -y --no-install-recommends \
#			postgresql-client vim

🐳 docker build 실행

# 앞서 Dockerfile 을 생성한 경로에서 아래 명령어 입력
docker build -t gdal .

⚙ gdal 컨테이너 사용방법 (1)

# 먼저 container 를 띄워줍니다.
docker run --name gdal -v '<host 경로>:<container 경로>' -itd gdal

# container 내부의 bash 로 접근 및 사용
docker exec -it gdal bash
  • 예시: docker run --name gdal -v 'C:\test_data:/test_data' -itd gdal

⚙ gdal 컨테이너 사용방법 (2)

# --rm 을 통해서 한번 명령어 실행 후, 곧바로 종료 및 컨테이너 제거 시키는 방법.
docker run --rm -v '<host 경로>:<container 경로>' gdal gdalinfo --version;

사용방법 (1) ~ (2) 중 아무거나 선택하고, gdal 이 잘 동작하면
이 글을 다 읽은 거나 마찬가지여서 이 이상 글을 더 읽을 필요는 없습니다.

다만 위의 각 단계에 대해서 더 디테일한 내용이 필요하거나,
간단한 테스트도 해보고 싶으신 분들만 이어서 아래 목차를 보시면 됩니다.




🍞 gdal image pull & run


https://github.com/OSGeo/gdal/blob/master/docker/README.md
에 접속하면 공식 gdal 이지미를 여러가지 형태로 제공합니다.
(링크를 걸어뒀으니 각 이미지의 특징이 궁금하면 클릭하세요)


저는 ubuntu 24:04 OS 기반의
ghcr.io/osgeo/gdal:ubuntu-small-latest 이미지를 기반으로 Dockerfile 을
작성하고, build 하여 사용해보겠습니다.


Dockerfile

FROM ghcr.io/osgeo/gdal:ubuntu-small-latest

# 이렇게 환경설정을 해줘야 한글이 정상적으로 읽히고 써집니다.
ENV LANG=C.UTF-8

# Timezone 을 우리나라에 맞춤
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

# 더 필요한 게 있으면 아래 추가 작성.
## 저는 psql 을 추가 설치했습니다. 필수 아닙니다!
RUN apt update && apt-get install -y --no-install-recommends postgresql-client

# 아래 ENTRYPOINT, CMD 는 docker stop 명령어 사용시 정상적인 종료를 위함.
ENTRYPOINT ["/bin/sh"]
CMD ["-c", "echo Container started\ntrap \"exit 0\" 15\n\nexec \"$@\"\nwhile sleep 1 \u0026 wait $!; do :; done", "-"]

docker build & run

docker build -t gdal .

docker run --name gdal -v 'C:\Users\dailyCode\bind_dir:/bind_dir' -d gdal;

container 내부로 들어가기

docker exec -it gdal bash;

(참고) 설치된 psql 테스트

# 저는 host pc 에 설치된 db 에 접근할 예정이므로 아래처럼 간단하게 테스트...
psql -h host.docker.internal -p 5432 -U postgres

참고: 도커는 컨테이너에서 외부 Host pc 에 접근하기 위해
host.docker.internal 라고 하는 특별한 도메인을 제공합니다. (참고)





💾 Download test file


테스트를 위해서 연속지적도-서울 데이터를 다운로드 받습니다 (회원가입 필요).

다운로드 받은 zip 파일을 docker run 명령어에서 -v 옵션으로
바인딩한 디렉토리에 넣습니다.

이후에 docker container 내부에서 다음과 같은 명령어를 입력해서
압축을 해제합니다.

# 참고로 gdal 이미지에 unzip 명령어가 이미 있습니다! 바로 사용 가능!
unzip LSMD_CONT_LDREG_서울.zip





🍞 Upload shapefile To DB


이제 준비가 모두 끝났습니다.
지금부터 shapefile 을 저의 Host PC 에 설치된
Postgresql Database 에 업로드해보겠습니다.

cd /bind_dir

ogr2ogr -overwrite -progress --config PG_USE_COPY YES -f PostgreSQL \
"PG:host=host.docker.internal port=5432 user=postgres password=root dbname=postgres schemas=public" \
./LSMD_CONT_LDREG_11_202402.shp \
-lco GEOMETRY_NAME=geom -nlt MULTIPOLYGON \
--config SHAPE_ENCODING "EUC-KR" \
-nln LSMD_CONT_LDREG_11

위 그림처럼 업로드가 완료되고 나서 psql 을 통해서 테이블이 정상적으로
생성됐는지 확인해봅니다.


1. 테이블 존재여부


2. 테이블 상세 정보 (컬럼명, 인덱스 등)


3. 한글 인코딩 깨짐 Check


이상으로 gdal 공식 이미지 사용법이였습니다. 글을 마치겠습니다.
읽어주셔서 감사합니다.

참고: gdal.jar 를 통해서 java 내에서 gdal api 를 사용하실 분들은
ghcr.io/osgeo/gdal:ubuntu-full-latest 을 사용해보시기 바랍니다.
해당 이미지를 build 하는 데 사용한 Dockerfile 은 이 링크를 참조해주세요.




🍞 참고 링크


profile
백엔드 개발자로 일하고 있는 식빵(🍞)입니다.

0개의 댓글