Dig up the ... 자세히보기

데이터 분석/1

Docker 기반 PostgreSQL을 설치하고 dBeaver로 접속하기

Factories 2022. 3. 27. 17:50

Docker 기반 PostgreSQL 데이터베이스를 설치,

DB 데이터는 다른 곳에서도 사용이 가능하도록 Docker 컨테이너가 아닌 로컬 영역에 저장

Dbeaver등 외부 Tool을 사용하여 접속하여 테스트 데이터베이스와 테이블 생성,

PostgreSQLSampleDB(dvdrental) 설치 및 테스트까지 정리한다.

-- 2022.03.26

 

1. 설치 및 기동

 

설치 환경: 사용자 PC에는 DockerDesktop 설치되어 있어야 한다

  • OS : window 10 Pro
  • Docker Desktop 버전 : version 2.1.0.5 (40693) - 20223월 설치
  • DBeaver 버전: 21.2.0
  • PostgreSQL 14.2 (22.03.26 latest)

 

1.1 Postgres 도커 이미지 가져오기

> docker pull postgres

 

1.2 도커 이미지가 생성되어 있는지 확인

> docker images

1.3 Postresql 이미지의 컨테이너를 생성하여 실행한다.

> docker run -p 5432:5432 --name postgresdb -e POSTGRES_PASSWORD=4080 -d -v postgresql_data:/var/lib/postgresql/data postgres

  • 실행시킬 이미지 이름을 마지막에 postgres로 지정했다.
  • --name 옵션을 통해 해당 이미지 컨테이너 이름을 postgresdb로 지정했다.
  • -p 옵션을 통해 서비스 포트를 디폴트 5432로 동일하게 지정하여 매핑했다.
  • -v 옵션을 통해 로컬 볼륨(postgresql_data)을 지정해주었다.
  • -d 옵션을 통해 daemon으로(background에서) 수행되도록 했다.
  • -e POSTGRES_PASSWORD는 4080로 지정했다(-e 옵션으로 POSTGRES_USER를 주지 않으면 자동으로 설정되는 디폴트 값은 postgres이다).

[참고] 위와 같이 지정하면 자동으로 postgresql_data라는 볼륨을 만들고 마운트한다(아래와 같이 직접 생성할 필요는 없다).

> docker volume create postgresql_data       # 데이터를 저장할 볼륨을 생성

 

주의 – local volume 지정

> docker run -p 5432:5432 --name postgresdb -e POSTGRES_PASSWORD=4080 -d -v d:/postgresql_data:/var/lib/postgresql/data postgres

  • -v 옵션을 --volume 옵션으로 바꾸어 보고, 디렉토리 경로 지정 방식(/d/postgresql_data, %pwd%/ postgresql_data)을 바꾸어 봐도 모두 오류(시작하자마자 바로 Exited 됨)가 발생한다. 즉, 윈도우의 하드 드라이버 경로를 지정하여 오류가 발생한 것이다.
  • 바인딩 방식으로 마운트 하는 위 방식의 오류에 대해 구글링 결과, postgresql 도커의 docker-entrypoint.sh에 있는 chown –R postgres “PGDATA” 라는 명령어가 ownership을 변경(root에서 postgres로) 하지 못해서 일어나는 현상이라고 한다. -- https://stackoverflow.com/questions/56946619/bind-mount-postgresql-data-on-windows-not-work
  • 그리고, 어찌어찌 해서 바인드 마운트를 Windows에서 작동하도록 하더라도 완벽하게 작동하지는 않습니다. 예를 들어 다른 사용자 및 권한을 처리할 때 문제가 발생합니다.  그래서 Linux는 무방하나 Windows에서는 현재로서는 볼륨을 생성한 마운트가 유일한 방법입니다. (해결을 위해 1년을 기다린 사람도 있다 하니 기대는 접어야 건강...^^) -- https://github.com/cytopia/devilbox/issues/175

 

1.4 Docker Container 정상적으로 실행되는지를 확인한다.

> docker ps -a   

  • STATUS 에서 'Exited'가 아닌 'Up xx minutes' 등이 보이면 container가 정상적으로 실행되고 있는 상태다.

1.5 컨테이너에 직접 접속하여 확인한다.

> docker exec -it postgresdb /bin/bash        <-- -itinteractive모드를 의미하는옵션

root@6ed7ca0ed90b:/# ls –al                     <-- bash 정상 동작 확인

root@6ed7ca0ed90b:/# psql -U postgres      <-- postgresql 서비스 정상 작동 확인

postgres=# \du                                      <-- postgresql 등록 사용자 정보 보기

postgres=# \q                                        <-- postgresql 빠져나오기

root@6ed7ca0ed90b:/# exit                    #  <-- 컨테이너에서 빠져나오기

 

1.6 Docker Container 종료한다.

> docker stop postgresdb                      

 

2. 데이터베이스 생성

 

2.1 Docker 컨테이너를 실행한다.

> docker start postgresdb                     

 

2.2 컨테이너( 리눅스 ) 접속한다.

> docker exec -it postgresdb /bin/bash    

 

2.3 컨테이너의 리눅스 쉘에서 PostgreSQL Client 접속한다.

# psql -U postgres                               

  •  -U 는 username을 postgres로 지정하는 것이다

postgres=# SELECT datname FROM pg_database;   -- 전체 데이터베이스 이름 출력

postgres=# SELECT datname FROM pg_database WHERE datistemplate = false; -- 사용자가 생성한 DB이름만 출력

2.4 PostgreSQL에 등록된 사용자 정보를 확인한다.

postgres=# \du                                   

postgres=# SELECT * FROM PG_USER;      

2.5 데이터베이스(PUBLIC 스키마)를 생성한다.

Postgres=# CREATE DATABASE testdb;          # TestDB라는 이름의 데이터베이스 생성

Postgres=# \l                                        # List of databases

  • CREATE DATABASE {원하는 데이터베이스 이름}
  • 정상적으로 만들어졌는지 확인  \l(lower case of L)

2.6 DATABASE 접속하여 테스트 테이블을 생성한다.

Postgres=# \c testdb                                                       

You are now connected to database “TestDB” as user “postgres”.

TestDB=# CREATE TABLE TestTable (                                     

id INT NOT NULL,                                                            

name VARCHAR(255),                                                       

CONSTRAINT TestTable_pk PRIMARY KEY (id)                         

);                                                                                 

INSERT INTO TestTable VALUES(1, 'number one');                    

INSERT INTO TestTable VALUES(2, 'number two');                    

SELECT * FROM TestTable;                                                 

 TestDB=# \dt                                                                 

TestDB=# \q                                                                   

root@6ed7ca0ed90b:/# exit                                                 

 

PostgreSQL Tutorials: https://www.postgresqltutorial.com/

 

 

3. DBeaver로 접속

 

3.1 Commuity 버전 다운로드 설치

https://dbeaver.io/

 

3.2 dBeaver 실행하고 데이터베이스 연결 버튼을 클릭한다.

3.3 database 선택 창에서 PostgreSQL 선택한다.

 

3.4 Connect to database 창이 나오면 앞서 지정했던 아래 그림의 connection 정보를 입력한다.

 

  • 생성 시 입력했던 정보(testdb/postgres/4080)를 등록하고 [Test Connection] 클릭하여 정상 접속을 확인한다.

 3.5 sql 편집기를 열어 앞서 생성했던 테이블을 조회한다.

 

4. Sample DB 설치

 

4.1 PostgreSQLsample 데이터베이스 다운로드 설명 페이지

https://www.postgresqltutorial.com/postgresql-sample-database/

 

4.2 sample 데이터 베이스 dvdrental 생성

# psql -U postgres                             
postgres=# create database dvdrental;    
postgres=# \l                                   
postgres=# \q                                  
# exit                                               

 

4.3 Sample 데이터 베이스 다운로드하여 압축풀기

# apt-get update                                      
# apt-get install wget                                
  <-- wget설치
# wget https://www.postgresqltutorial.com/wp-content/uploads/2019/05/dvdrental.zip

# apt install unzip                                      <-- unzip 설치
# unzip dvdrental.zip                                 
<-- 압축 풀기

 

4.4 Sample 데이터 베이스 설치하기

# su postgres                                            <-- Switch User
$ pg_restore -d dvdrental dvdrental.tar         

 

4.5 sample 데이터 베이스 dvdrental의 테이블 확인

# psql -U postgres                                   
postgres=# select * from pg_database where datname='dvdrental';     

 

4.6 DBeaver에서 접속 확인

dvdrental 샘플 데이터 확인

참고: DVDRental ER Model

 

5. Docker 컨테이너 관리 명령

 

> docker ps –a              <-- 윈도즈  커맨드 라인
# ls –al                        <-- postgresql 컨테이너의 Devian  커맨드 라인
postgres=# \l               <-- PostgreSQL 커맨드 라인

 도커 컨테이너 시작, 종료하기

> docker start postgresdb       # 컨테이너 시작

> docker stop postgresdb       # 컨테이너 종료

 

Docker 컨테이너를 로컬에서 삭제한다.

> docker rm postgresdb          # 컨테이너 삭제

 

Docker 이미지를 로컬에서 삭제한다.

> docker rmi postgres             # 도커 이미지 삭제

 

로컬 볼륨 정보를 확인한다.

> docker volume list           

 

> docker volume inspect postgres_data  

지정한 로컬 데이터 볼륨을 삭제시킨다.

> docker volume remove postgresdata     # 컨테이너를 먼저 종료/삭제해야 한다

 

docker에서 모든 볼륨을 삭제시킨다.

> docker volume prune                       

WARNING! This will remove all local volumes not used by at least one container.

Are you sure you want to continue? [y/N] y

 

아래 명령은 리눅스에서의 데이터 경로를 보여준다.

postgres=# show data_directory;

 

6. 참고 정보

 

   • Docker Postgresql 설치 셋팅하기, https://judo0179.tistory.com/96, 2020.10.19.

   • [Docker] docker postgresql container & dbeaver connect 하는 , https://dailylifecoding.tistory.com/entry/docker-postgresql-container-dbeavor-%EB%A5%BC-connect-%ED%95%98%EB%8A%94-%EB%B2%95

   • docker - PostgreSQL 컨테이너 실행, https://www.sysnet.pe.kr/2/0/12179

   • PostgreSQL Sample Database, https://www.postgresqltutorial.com/postgresql-sample-database/

   • Download and load PostgreSQL sample database, https://www.postgresql.r2schools.com/download-and-load-postgresql-sample-database/

   • 5 Linux Command Line Based Tools for Downloading Files and Browsing Websites, https://www.tecmint.com/linux-command-line-tools-for-downloading-files/

 

2022.03.27.

Factories

'데이터 분석 > 1' 카테고리의 다른 글

Let's Dig Up  (0) 2021.04.10