그냥 "postgis 이미지를 사용하면 되지 않냐고?" 라고 할 수도 있지만 상황에 따라서는
postgres
이미지를 사용하면서 postgis
를 추가해야되는 경우도 발생합니다.
아무튼 Dockerfile
과 쉘스크립트를 작성해서 이를 가능케 하는 방법을 공유합니다.
참고:
이 게시물에 작성된Dockerfile
,쉘스크립트
의 내용은 대부분
docker hub - postgis
에서 사용하는 Dockerfile 내역을 많이 참고해서 작성한 겁니다.
혹시 이 게시물의 방법이 좀 안 맞으면 해당 링크를 타고 가서 조사해보시기 바랍니다 😊
위 2개의 파일이 필요합니다.
각 파일의 내용은 다음 목차에 이어서 설명합니다.
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
#!/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 logs 를 통해서 create extension 문구가 잘 찍혔는지 확인해봅니다.
또한 생성된 컨테이너의 DB 에 접속하여 아래 명령어를 입력해서 최종적으로
정상 설치 여부를 확인합니다.
select postgis_version();