포스트그레스 - 도커로 개발환경 만들기
개발 환경에서 포스트그레스 DB를 도커로 설치하는 과정입니다. 웹 서비스 개발이나 데이터 분석에서 데이터베이스는 기본적으로 필요한 요소입니다. 서비스를 개발하거나 새로운 기술을 배우는 중에는 로컬 개발환경에 여러 종류의 데이터베이스를 번갈아 사용하거나 다른 버전을 설치해야하는 경우가 생기기 마련인데요. 이런 때에 도커를 사용해서 컨테이너별로 생성을 해 두고 사용하면 깔끔하게 관리를 할 수 있습니다. 포스트그레스큐엘(PostgreSQL)을 도커를 사용해서 사용하는 튜토리얼은 RecoFlix를 만들면서 사용하려는 용도로 작성되었습니다.
튜토리얼을 진행하기 전에 우선 도커가 설치되고 실행되어 있어야합니다.
포스트그레스 도커 이미지
공식 포스트그레스 도커 이미지는 도커 허브 공식 사이트에서 확인할 수 있습니다. 이 튜토리얼을 작성하는 현재 최신 버전은 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