[Docker] Docker X PostgreSQL 설치 및 연동

haeny-dev·2021년 7월 24일
3

Docker

목록 보기
2/2
post-thumbnail

🐘 Docker x PostgreSql

➕ PostgreSQL 설치

1. Postgres 이미지 내려받기

$ docker pull postgres

2. Postgres 실행

호스트의 5432포트와 컨테이너의 5432포트를 연결해주고 postgres 라는 이름을 가진 컨테이너에 환경변수 POSTGRES_PASSWORD 의 값을 넣어주어 실행시켜주겠습니다.

postgres 이미지의 환경변수에 대한 더 자세한 내용은 아래 링크에서 확인 할 수 있습니다. Postgres - Official Image | DockerHub

$ docker run -d -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=12345678 postgres

도커 컨테이너 특성상 컨테이너가 중지되거나 삭제될 경우 해당 컨테이너에서 사용한 데이터 또한 전부 삭제됩니다.

만약, 데이터베이스를 도커로 실행시켜 사용하던 도중 컨테이너가 내려가는 현상이 발생한다면 그 전까지 사용해오던 데이터가 모두 삭제되어 없어질 것입니다.

그런 현상을 방지하기 위해서 데이터베이스와 같이 데이터의 지속성이 필요한 경우 도커 볼륨이나 바인드 마운트를 사용하여 컨테이너의 데이터가 사라지지 않도록 해줄 수 있습니다.

여기서는 도커 볼륨이나 바인드 마운트에 대한 언급은 따로 하지 않을 예정입니다.
[Docker] 데이터 관리(1) Volume 과 Bind mounts 를 참고해주세요.

2-1. Postgres 실행 with Volume

postgres 컨테이너에 사용하기 위한 볼륨을 생성합니다.

$ docker volume create pgdata

위에서 생성한 볼륨을 postgres 컨테이너의 /var/lib/postgresql/data 에 연결해주어 컨테이너를 실행합니다.

$ docker run -d -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=12345678 -v pgdata:/var/lib/postgresql/data postgres

2-2. Postgres 실행 with Bind mounts

postgres 컨테이너에 연결해서 사용하기 위한 폴더를 호스트 파일시스템에서 생성합니다.

$ mkdir pgdata

위에서 생성한 디렉토리를 연결하여 컨테이너를 실행합니다.

$ docker run -d -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=12345678 -v ~/pgdata:/var/lib/postgresql/data postgres

3. 데이터 지속 확인

실행되고 있는 postgres 컨테이너로 접속하여 postgres 에 접속하겠습니다.

$ docker exec -it postgres /bin/bash
root@caa78328d590:/# psql -U postgres

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

새로운 계정을 생성하고, 그 뒤 컨테이너를 삭제 후에 다시 같은 볼륨 또는 바인드마운트에 마운트하여 컨테이너를 실행시켜 계정정보가 지속되는지 확인하겠습니다.

postgres=# CREATE USER testuser PASSWORD '1234' SUPERUSER;
CREATE ROLE
postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 testuser  | Superuser
$ docker stop postgres
$ docker rm postgres
$ docker run -d -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=12345678 -v pgdata:/var/lib/postgresql/data postgres
$ docker exec -it postgres /bin/bash
root@caa78328d590:/# psql -U postgres
psql (13.3 (Debian 13.3-1.pgdg100+1))
Type "help" for help.
postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 testuser  | Superuser

➕ 연동 with DataGrip

DataGrip 를 실행시켜 DataSource 를 추가하여 도커에 올려놓은 PostgreSQL 에 연결하여 DataGrip에서 테이블을 생성 후 도커를 통해서 생성된 테이블이 있는지 확인해보겠습니다.

1. PostgreSQL 연결 with DataGrip

도커를 local환경에 설치하였다면, 아래 그림과 같이 Host정보를 입력해주고 생성해준 계정정보 또는 postgres 계정정보를 입력 후 좌측 하단의 Test Connection 버튼을 눌러 연결이 되는지 확인해주세요.

AWS EC2에 도커를 설치하였다면, Host에 인스턴스의 IP정보를 입력하면 됩니다.

2. 데이터베이스 & 테이블 생성

postgres 계정으로 접속하여 새로 생성한 계정이 접근할 수 있는 데이터베이스를 생성합니다.

새로 생성한 데이터베이스에서 console을 새로 열어 테이블을 생성합니다.

3. 도커에서 확인

도커에서 postgres 컨테이너로 접속한 후 위에서 생성한 데이터베이스로 연결하여 테이블 목록을 확인해보겠습니다.

postgres=# \c test haeny
You are now connected to database "test" as user "haeny".

test=# \dt
        List of relations
 Schema |  Name  | Type  | Owner
--------+--------+-------+-------
 public | people | table | haeny
(1 row)

📖 REFERENCE

Docker Postgresql 설치 및 셋팅하기

0개의 댓글