Docker 기반 PostgreSQL 데이터베이스를 설치,
DB 데이터는 다른 곳에서도 사용이 가능하도록 Docker 컨테이너가 아닌 로컬 영역에 저장
Dbeaver등 외부 Tool을 사용하여 접속하여 테스트 데이터베이스와 테이블 생성,
PostgreSQL의 SampleDB(dvdrental) 설치 및 테스트까지 정리한다.
-- 2022.03.26
1. 설치 및 기동
설치 환경: 사용자 PC에는 DockerDesktop이 설치되어 있어야 한다.
- OS : window 10 Pro
- Docker Desktop 버전 : version 2.1.0.5 (40693) - 2022년 3월 설치
- DBeaver 버전: 21.2.0
- PostgreSQL 14.2 (22.03.26 latest)
1.1 Postgres 도커 이미지 가져오기
> docker pull postgres
- 공식 이미지 소개 페이지: https://hub.docker.com/_/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 <-- -it는interactive모드를 의미하는옵션
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 버전 다운로드 및 설치
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 PostgreSQL의 sample 데이터베이스 다운로드 설명 페이지
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 |
---|