[docker] postgres 이미지에 postgis extension 추가하는 법

식빵·2025년 3월 29일
0

postgis

목록 보기
10/10

그냥 "postgis 이미지를 사용하면 되지 않냐고?" 라고 할 수도 있지만 상황에 따라서는
postgres 이미지를 사용하면서 postgis 를 추가해야되는 경우도 발생합니다.
아무튼 Dockerfile 과 쉘스크립트를 작성해서 이를 가능케 하는 방법을 공유합니다.

참고:
이 게시물에 작성된 Dockerfile, 쉘스크립트의 내용은 대부분
docker hub - postgis 에서 사용하는 Dockerfile 내역을 많이 참고해서 작성한 겁니다.
혹시 이 게시물의 방법이 좀 안 맞으면 해당 링크를 타고 가서 조사해보시기 바랍니다 😊



dockerbuild 를 위한 파일구성

위 2개의 파일이 필요합니다.
각 파일의 내용은 다음 목차에 이어서 설명합니다.



Dockerfile 작성

FROM postgres:17.4

# 한글 locale 을 사용토록 하겠습니다.
RUN localedef -i ko_KR -c -f UTF-8 -A /usr/share/locale/locale.alias ko_KR.UTF-8
ENV LANG ko_KR.utf8

# 이 아래 내용부터는 
# https://github.com/postgis/docker-postgis 의 Dockerfile 내용을 참고했습니다.
ENV POSTGIS_MAJOR=3

RUN apt-get update \
      && apt-cache showpkg postgresql-$PG_MAJOR-postgis-$POSTGIS_MAJOR \
      && apt-get install -y --no-install-recommends \
           # ca-certificates: for accessing remote raster files;
           #   fix: https://github.com/postgis/docker-postgis/issues/307
           ca-certificates \
           \
           postgresql-$PG_MAJOR-postgis-$POSTGIS_MAJOR \
           postgresql-$PG_MAJOR-postgis-$POSTGIS_MAJOR-scripts \
      && rm -rf /var/lib/apt/lists/*

RUN mkdir -p /docker-entrypoint-initdb.d
COPY ./initdb-postgis.sh /docker-entrypoint-initdb.d/10_postgis.sh

참고: postgres 버전이 많이 낮으면 postgis 버전 호환성은 한번 확인해보고 진행주세요!
https://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS



initdb-postgis.sh 작성

#!/bin/bash

set -e

# Perform all actions as $POSTGRES_USER
export PGUSER="$POSTGRES_USER"

# Create the 'template_postgis' template db
psql -c "CREATE DATABASE template_postgis IS_TEMPLATE true"

# Load PostGIS into both template_database and $POSTGRES_DB
for DB in template_postgis "$POSTGRES_DB"; do
	echo "Loading PostGIS extensions into $DB"
		psql --dbname="$DB" <<-'EOSQL'
		CREATE EXTENSION IF NOT EXISTS postgis;
		CREATE EXTENSION IF NOT EXISTS postgis_topology;
		EOSQL
done

모든 Database 에 postgis extension 을 설치해줍니다.
또한 추후 Database 생성 시 postgis 를 바로 적용할 수 있도록
template_postgis 를 하나 생성해줍니다.



docker build 테스트

위처럼 파일을 다 준비하고 docker build 를 해보고,
docker logs 를 통해서 create extension 문구가 잘 찍혔는지 확인해봅니다.


또한 생성된 컨테이너의 DB 에 접속하여 아래 명령어를 입력해서 최종적으로
정상 설치 여부를 확인합니다.

select postgis_version();

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

0개의 댓글