postgresql docker 설정하기

2023-11-07


도커 이미지

https://hub.docker.com/_/postgres

postgre 공식 이미지를 참고하자.

환경변수 설정

컨테이너 안 환경변수를 설정해서 DB 초기 설정을 할 수 있다.

POSTGRES_PASSWORD는 반드시 설정돼 있어야 하며 superuser 비밀번호가 된다.

POSTGRES_USER의 경우 postgresqlsuperuser는 기본적으로 postgre인데 postgre 말고 다른 유저명을 사용하고 싶을 때 설정한다.

주의사항으로 이 환경변수 설정으로 만들어지는 유저는 슈퍼유저다. 권한분리를 위해 따로 유저를 만드는 경우 아래에 설명할 스크립트로 해줘야한다.

POSTGRES_DB는 기본적으로 만들어지는 DB이름이다. 프로젝트에서 사용하는 DB이름을 넣어주자.

PGDATA는 DB안 데이터가 저장될 경로를 설정할 수 있다. 기본적으로 /var/lib/postgresql/data가 설정된다.

더 많은 설정은 공식 문서에서 볼 수 있다.

시작 스크립트

컨테이너 속 /docker-entrypoint-initdb.d 디렉토리에 *.sql 혹은 *.sql.gz 혹은 *.sh 스크립트가 있으면 서비스를 시작하기 전 실행시킨다.

이 설정은 DockerfileCOPY 혹은 VOLUME으로 해주면 된다. 나는 docker-composevolumes을 이용했다.

주의사항으로 데이터 디렉토리에 뭐라도 있는 경우 시작 스크립트는 실행되지 않는다. 아쉽지만 데이터 디렉토리를 날려버리고 재시작을 하건 직접 스크립트를 적용하던 해야한다.

예제 docker-compose

volumes로 컨테이너를 내려도 데이터가 유지되게 했고 나머지는 위에 나온 환경설정을 해줬다.


version: '3.7'
services:
db:
image: postgres:16
ports:
- "52788:5432"
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- ./data:/var/lib/postgresql/data
- ./sql:/docker-entrypoint-initdb.d