PostgreSQL Docker 설정

업데이트: Link

PostgreSQL Docker 설정

docker를 이용해 postgresql 서버를 새로 설치하고 사용하기 위한 간편 설정을 정리했다.

이 문서는 docker가 설치되어 있다는 가정 하에 진행한다. 설치되어 있지 않다면 먼저 설치를 하고 문서를 보고 따라하길 바란다.

설치 및 환경 설정

데이터베이스 postgresqldocker를 이용해 독립적으로 설치하고 관리할 수 있다.

Dockerfile 생성

우선 첫째로, docker image 를 만들 Dockerfile 준비한다. 필요한 zsh, locales, tzdata 등을 설치하고, 대략 locale 설정이나 timezone 설정까지만 해놓으면 된다.

추가로 기분좋은 접속을해위해 zsh, powerlevel10k theme 까지 설치한다.

FROM postgres:15.1

RUN apt-get update
RUN apt-get install -y \
    apt-utils \
    wget \
    zsh \
    curl \
    locales \
    tzdata
RUN sh -c "$(wget -O- https://github.com/deluan/zsh-in-docker/releases/download/v1.1.5/zsh-in-docker.sh)"

# 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

# localtime 에 링크할 시간대를 링크.
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

# 원하는 시간대 링크후 아래 수행시, /etc/timezone 파일변경됨.
RUN dpkg-reconfigure -f noninteractive tzdata

도커 이미지 빌드 및 실행

docker 이미지를 빌드한다.

docker build -t postgres15 .

docker run 스크립트를 하나 만든다. 이름은 postgres-15 으로하고, 타 컨테이너와 연계를 위해 network 설정을 해놓았다.

postgres 패스워드와 데이터 파일 연결등을 설정해 준다.

# docker-run.sh - sh 실행파일
docker run -d  \
    --name postgres-15 \
    --network your-netword \
    --restart=always \
    -p 5432:5432 \
    -e POSTGRES_PASSWORD=your_password \
    -e PGDATA=/var/lib/postgresql/data/pgdata \
    -v ~/postgres-15/data:/var/lib/postgresql/data \
    postgres15
rem docker-run.bat - 윈도우즈 실행파일
docker run -d  --name postgres-15 --network your-netword --restart=always -p 5432:5432 -e POSTGRES_PASSWORD=your_password -e PGDATA=/var/lib/postgresql/data/pgdata -v ~/postgres-15/data:/var/lib/postgresql/data postgres15

⚠️ 참고 혹시 네트워크 오류 아래 오류가 나타난다면 네트워크가 생성되어 있지 않다는 이야기다.

docker: Error response from daemon: network mqv-net not found.

실행한 도커를 중단 및 삭제하고 네트워크를 생성 후 다시 실행해야 한다. 중단 삭제 하기 위해서는 아래 명령이 필요하다.

# 도커 실행중단
docker stop postgres-15

# 네트워크 조회
docker network ls

# 네트워크 생성
network create your-netword

# 도커 컨테이너 삭제
docker rm postgres-15

실행 확인 및 database, user 생성

서버를 구동했으니, 서버에 접속하는 스크립트도 실행해서 접속해본다.

docker exec -it --user root -w /var/lib/postgresql postgres-15 zsh

docker exec 로 접속한 쉘에서 db_user 사용자를 만들고 해당 사용자를 owner로 하는 your_database 이름의 데이터베이스를 하나 만든다.

psql -U postgres
create user db_user with password 'db_pass';
create DATABASE your_database OWNER db_user;
\l
\q

물론 psql 로 커멘드창에서 붙어도 되긴하지만, DBeaver와 같은 프로그램으로 아래의 정로를 통해 접속을 시도해본다.

database: your_database
username: db_user
password: db_pass

댓글남기기