dockerfile
# Rocky Linux Base image from Customized Rocky 8.9 by HaeDon
# ARG REGISTRY_ADDRESS=$CUSTOM.$CONTAINER_IMAGE.$REGISTRY
# ARG PROJECT=$PROJECT_NAME
# ARG CATEGORY=$CATEGORY_NAME
# ARG IMAGE_NAME=$IMAGE_NAME
# ARG TAG=$TAG
# FROM ${CUSTOM.$CONTAINER_IMAGE.$REGISTRY}/${PROJECT_NAME}/${CATEGORY_NAME}/${IMAGE_NAME}:${TAG}
# Base image
FROM rockylinux:8.9-haedong
# User for run commands below
USER root
# Install PostgreSQL package
RUN dnf -setopt=skipcache=0 install -y \
https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm &&\
dnf -qy module disable postgresql &&\
dnf -setopt=skipcache=0 install -y postgresql16-server &&\
dnf clean all &&\
rm -rf /var/cache/yum
# Initiallize PostgreSQL
RUN mkdir -p /postgres/16/data &&\
chown -R postgres:postgres /postgres/16/data &&\
sudo -i -u postgres /usr/pgsql-16/bin/initdb -D /postgres/16/data --encoding=UTF8 &&\
usermod -d /postgres postgres &&\
echo "host all all 0.0.0.0/0 md5" >> /postgres/16/data/pg_hba.conf
COPY entrypoint.sh /usr/bin/
RUN chown -R postgres:postgres /usr/bin/entrypoint.sh && chmod 754 /usr/bin/entrypoint.sh
EXPOSE 5432
CMD ["/usr/bin/entrypoint.sh"]
USER haedong
#!/bin/bash
set -e
# 1. PostgreSQL 데이터 디렉토리가 비어 있는 경우 초기화
if [ ! -s "/var/lib/pgsql/data/PG_VERSION" ]; then
echo "Initializing database..."
/usr/pgsql-16/bin/initdb -D /var/lib/pgsql/data --encoding=UTF8 --locale=en_US.UTF-8
echo "Starting PostgreSQL temporarily..."
/usr/pgsql-16/bin/pg_ctl -D /var/lib/pgsql/data -w start
echo "Creating user and database..."
psql -c "CREATE ROLE root LOGIN SUPERUSER CREATEROLE PASSWORD 'PASSWORD'; "
psql -c "CREATE ROLE haedong LOGIN SUPERUSER CREATEROLE PASSWORD 'PASSWORD'; "
psql -c "CREATE ROLE grafana LOGIN SUPERUSER CREATEROLE PASSWORD 'PASSWORD'; "
psql -c "CREATE ROLE exporter LOGIN SUPERUSER CREATEROLE PASSWORD 'PASSWORD'; "
psql -c "CREATE ROLE trino LOGIN SUPERUSER CREATEROLE PASSWORD 'PASSWORD'; "
psql -c "CREATE ROLE metastore LOGIN SUPERUSER CREATEROLE PASSWORD 'PASSWORD'; "
psql -c "CREATE ROLE metadata LOGIN SUPERUSER CREATEROLE PASSWORD 'PASSWORD'; "
psql -c "CREATE ROLE scm LOGIN CREATEROLE PASSWORD '${MASKED}' ; "
psql -c "CREATE ROLE rman LOGIN CREATEROLE PASSWORD '${MASKED}' ; "
psql -c "CREATE ROLE ranger LOGIN CREATEROLE PASSWORD '${MASKED}' ; "
psql -c "CREATE ROLE hue LOGIN CREATEROLE PASSWORD '${MASKED}' ; "
psql -c "CREATE ROLE hive LOGIN CREATEROLE PASSWORD '${MASKED}' ; "
psql -c "CREATE ROLE oozie LOGIN CREATEROLE PASSWORD '${MASKED}' ; "
psql -c "CREATE ROLE schemaregistry LOGIN CREATEROLE PASSWORD '${MASKED}' ; "
psql -c "CREATE ROLE smm LOGIN CREATEROLE PASSWORD '${MASKED}' ; "
psql -c "CREATE DATABASE root OWNER root ENCODING 'UTF8'; "
psql -c "CREATE DATABASE haedong OWNER haedong ENCODING 'UTF8'; "
psql -c "CREATE DATABASE grafana OWNER root ENCODING 'UTF8'; "
psql -c "CREATE DATABASE exporter OWNER haedong ENCODING 'UTF8'; "
psql -c "CREATE DATABASE trino OWNER trino ENCODING 'UTF8'; "
psql -c "CREATE DATABASE metastore OWNER metastore ENCODING 'UTF8'; "
psql -c "CREATE DATABASE metadata OWNER metadata ENCODING 'UTF8'; "
psql -c "CREATE DATABASE scm OWNER scm ENCODING 'UTF8'; "
psql -c "CREATE DATABASE rman OWNER rman ENCODING 'UTF8'; "
psql -c "CREATE DATABASE ranger OWNER ranger ENCODING 'UTF8'; "
psql -c "CREATE DATABASE hue OWNER hue ENCODING 'UTF8'; "
psql -c "CREATE DATABASE hive OWNER hive ENCODING 'UTF8'; "
psql -c "CREATE DATABASE oozie OWNER oozie ENCODING 'UTF8'; "
psql -c "CREATE DATABASE schemaregistry OWNER schemaregistry ENCODING 'UTF8';"
psql -c "CREATE DATABASE smm OWNER smm ENCODING 'UTF8'; "
echo "Stopping temporary PostgreSQL..."
/usr/pgsql-16/bin/pg_ctl -D /var/lib/pgsql/data -m fast -w stop
fi
# 2. 실제 PostgreSQL을 foreground로 실행
exec "/usr/pgsql-16/bin/postgres -D /var/lib/pgsql/data"