도커 이미지
https://hub.docker.com/_/postgres
postgre 공식 이미지를 참고하자.
환경변수 설정
컨테이너 안 환경변수를 설정해서 DB 초기 설정을 할 수 있다.
POSTGRES_PASSWORD
는 반드시 설정돼 있어야 하며 superuser
비밀번호가 된다.
POSTGRES_USER
의 경우 postgresql
의 superuser
는 기본적으로 postgre
인데 postgre
말고 다른 유저명을 사용하고 싶을 때 설정한다.
주의사항으로 이 환경변수 설정으로 만들어지는 유저는 슈퍼유저다. 권한분리를 위해 따로 유저를 만드는 경우 아래에 설명할 스크립트로 해줘야한다.
POSTGRES_DB
는 기본적으로 만들어지는 DB이름이다. 프로젝트에서 사용하는 DB이름을 넣어주자.
PGDATA
는 DB안 데이터가 저장될 경로를 설정할 수 있다. 기본적으로 /var/lib/postgresql/data
가 설정된다.
더 많은 설정은 공식 문서에서 볼 수 있다.
시작 스크립트
컨테이너 속 /docker-entrypoint-initdb.d
디렉토리에 *.sql
혹은 *.sql.gz
혹은 *.sh
스크립트가 있으면 서비스를 시작하기 전 실행시킨다.
이 설정은 Dockerfile
의 COPY
혹은 VOLUME
으로 해주면 된다. 나는 docker-compose
의 volumes
을 이용했다.
주의사항으로 데이터 디렉토리에 뭐라도 있는 경우 시작 스크립트는 실행되지 않는다. 아쉽지만 데이터 디렉토리를 날려버리고 재시작을 하건 직접 스크립트를 적용하던 해야한다.
예제 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