2 minute read

개발 환경에서 포스트그레스 DB를 도커로 설치하는 과정입니다. 웹 서비스 개발이나 데이터 분석에서 데이터베이스는 기본적으로 필요한 요소입니다. 서비스를 개발하거나 새로운 기술을 배우는 중에는 로컬 개발환경에 여러 종류의 데이터베이스를 번갈아 사용하거나 다른 버전을 설치해야하는 경우가 생기기 마련인데요. 이런 때에 도커를 사용해서 컨테이너별로 생성을 해 두고 사용하면 깔끔하게 관리를 할 수 있습니다. 포스트그레스큐엘(PostgreSQL)을 도커를 사용해서 사용하는 튜토리얼은 RecoFlix를 만들면서 사용하려는 용도로 작성되었습니다. PostgreSQL docker hub

튜토리얼을 진행하기 전에 우선 도커가 설치되고 실행되어 있어야합니다.

포스트그레스 도커 이미지

공식 포스트그레스 도커 이미지는 도커 허브 공식 사이트에서 확인할 수 있습니다. 이 튜토리얼을 작성하는 현재 최신 버전은 13.1입니다.

아래와 같이 도커 이미지를 받습니다.

% docker pull postgres

위 명령어를 실행하면 아래처럼 필요한 이미지를 다운로드받게 됩니다.

Using default tag: latest
latest: Pulling from library/postgres
a076a628af6f: Downloading [=====================================>             ]   20.4MB/27.11MB
d54fa0e0eb76: Download complete 
8950a7ea6876: Download complete 
1cc02b1df09e: Download complete 
06f548e51228: Download complete 
74665692d4ea: Download complete 
235e34eb13ab: Download complete 
4ad7ef5e2e79: Download complete 
76670339b0f8: Downloading [=============>                                     ]  19.35MB/73.68MB
496fa0539f99: Download complete 
f32ecbdf3b52: Download complete 
7536b8fe81ac: Download complete 
b147719f22c0: Download complete 
22f2f0aa94ae: Download complete 

다운로드가 완료되면 image를 확인해 봅니다.

 % docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
postgres     latest    4ea2949e4cb8   9 hours ago   314MB

컨테이너 실행하기

폴더를 하나 만들어서 포스트그레스가 데이터베이터 파일을 지정된 폴더에 저장하도록 합니다.

 % mkdir ${HOME}/postgres-dat

이 폴더의 경로는 컨테이너를 실행할 때 파라미터로 넣어서 컨테이너 내부의 /var/lib/postgresql/data 폴더와 연결되도록 합니다.

아래 명령어로 포스트그레스 컨테이너를 실행합니다.

docker run -d \
	--name postgres-dev \
	-e POSTGRES_PASSWORD=Pass2021! \
	-v ${HOME}/postgres-data:/var/lib/postgresql/data \
    -p 5432:5432 \
    postgres
  • name : 컨테이너 이름
  • e : postgres 사용자의 미밀번호를 지정합니다.
  • v : 앞서 생성한 ${HOME}/postgres-data 폴더를 /var/lib/postgresql/data 에 연결시킵니다.

아래 명령어로 postgres-dev 컨테이너가 실행되고 있는지 확인합니다.

% docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS          PORTS                    NAMES
d358850194b2   postgres   "docker-entrypoint.s…"   11 minutes ago   Up 11 minutes   0.0.0.0:5432->5432/tcp   postgres-dev

데이터 파일이 폴더에 생성되었는지 확인합니다.

% ls ${HOME}/postgres-data
PG_VERSION           pg_commit_ts         pg_ident.conf        pg_notify            pg_snapshots         pg_subtrans          pg_wal               postgresql.conf
base                 pg_dynshmem          pg_logical           pg_replslot          pg_stat              pg_tblspc            pg_xact              postmaster.opts
global               pg_hba.conf          pg_multixact         pg_serial            pg_stat_tmp          pg_twophase          postgresql.auto.conf postmaster.pid

데이터베이스, 사용자 생성하기

아래 명령어로 postgres-dev 컨테이너에 bash 쉘로 로그인합니다.

% docker exec -it postgres-dev bash

현재 root 사용자로 로그인된 상태입니다. 여기서 postgres 사용자로 psql을 실행합니다.

psql -U postgres

psql (13.1 (Debian 13.1-1.pgdg100+1))
Type "help" for help.

postgres=#

recoflix 라는 이름으로 데이터베이스를 만들고 recoflix_user 사용자를 만듭니다. 새로만든 사용자에게 recoflix 데이터베이스를 사용할 수 있도록 권한을 부여합니다.

postgres=# CREATE DATABASE recoflix;
CREATE DATABASE
postgres=# CREATE USER recoflix_user WITH ENCRYPTED PASSWORD 'recoflix_password';
CREATE ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE recoflix TO recoflix_user;
GRANT

이렇게 해서 데이터베이스 생성까지 되었습니다. 데이터베이스 접속은 localhost에 5432 포트로 할 수 있습니다.

컨테이너 stop, start

postgres-dev 컨테이너를 중지시키고 싶으면 stop 명령어를 사용합니다.

docker container stop postgres-dev

시작은 start 명령어를 사용합니다.

docker container start postgres-dev