[docker] postgresql container 설치하고 dbeavor 연결하는 법

식빵·2022년 1월 24일
0

docker reference

목록 보기
4/9
post-thumbnail
post-custom-banner

이 게시물은 제가 이전에 관리하던 티스토리 블로그에서 가져온 글입니다.

추천: velog는 화면의 글자가 굉장히 크게 나옵니다.
zoom out을 좀 하고 읽는 걸 추천합니다 ^^;


🐳 작성계기

최근 생활코딩님의 docker 입문 강좌 덕분에 관련된 몇 가지를 테스트해봤다.
참고로 생활코딩님의 docker 입문 영상은 아래 주소를 참조하자.

https://www.youtube.com/watch?v=Ps8HDIAyPD0&list=PLuHgQVnccGMDeMJsGq2O-55Ymtx0IdKWf

이 게시물도 몇 가지 테스트 중 하나였는데, 나중에 써먹을 수 있을 거 같아서 기록한다.


이 테스트의 목표!

  • docker container(postgresql) 설치
  • postgresql client program 으로 DB Server 접속 및 Database 생성
  • dbeaver를 통한 Docker 내의 postgresql 접속

지금부터 그 과정을 알아보자.



🐳 나의 테스트 환경

  • OS : window 10(Home Edition)
  • Docker 버전 : version 20.10.8, build 3967b7d
  • DBeaver 버전: 21.2.0
  • 터미널 유틸: Window Terminal (power-shell 또는 cmd 를 써도 무관)

Window Terminal 을 다운로드 받고 싶으면 아래 주소로 가면 된다.
https://www.microsoft.com/ko-kr/p/windows-terminal/9n0dx20hk701?activetab=pivot:overviewtab




🐳 docker run

도커를 통해서 postgresql 을 이미지를 받고 run 해보자.

지금부터 나오는 docker 명령어 및 옵션은 https://docs.docker.com/engine/reference/commandline/run/ 를 참고하자.

그런데 주의할 게 있다.
docker run 명령을 입력할 때 host pc에서 사용하지 않는 port가 뭔지 먼저 알아야 한다.

나는 port forwarding에 사용할 호스트 pc의 port를 5555로 할 예정이다.
power shell(또는 cmd) 를 실행해서 netstat -ano | findstr 5555 라고 입력해보자.

만약 아무것도 print 되지 않는다면 현재 호스트 pc 에서 사용하지 않는 포트라는 것이다.
맘 편하게 사용하자.

CLI 프로그램(나의 경우는 Window Terminal)을 켜서 아래 명령어를 입력한다.

docker run --name postgreDb -d -p 5555:5432 -e POSTGRES_PASSWORD=1234 postgres


정상적으로 container 실행되고 있는지는 다음 명령어를 입력하면 알 수 있다.

docker ps -a

STATUS에서 Up ~ minutes 라는 글귀가 보이면 container가 정상 실행 중인 상태다.
이제 container에서 실행중인 postgresql DBMS에 접속하기 위해서 다음 명령어를 입력한다.

docker exec -it postgreDb /bin/bash



그러면 container 내부의 linux 의 bash shell 이 실행된 상태의 화면이 보이게 된다.
가볍게 linux 명령어인 ls -al 을 입력해서 bash 가 정상적으로 동작하는지 확인해보자.


docker container의 linux 환경에 설치된 postgres의 Client 프로그램에 접속하자.
아래 명령어를 입력한다.

psql -U postgres


참고로 -U 는 username 이고, 우리가 docker run 명령어에서 -e 옵션으로
POSTGRES_USER 를 주지 않으면 자동으로 설정되는 값이 postgres 이다.

아무튼 이렇게 해서 postgresql이 제공하는 Client 프로그램에 접속하면 아래와 같이 정상적으로 접속되는 걸 확인할 수 있다.


이제 여러 스키마(SCHEMA)을 묶어주는 역할인 데이터베이스(DATABASE)를 만들어보겠다.
CREATE DATABASE {원하는 데이터베이스 이름} 를 입력하고 나서, 정상적으로 만들어졌는지 \l 를 입력해서 확인하자.


만들어진 DATABASE 에 접속하고 싶으면 \connect {만든 데이터베이스 이름} 을 입력하면 된다.

이제 dbeavor 로 지금 만든 postgres 의 daily_code database 에 접속해보겠다.

참고: CREATE DATABASE 명령어를 쳐서 데이터베이스를 생성하면 DEFAULT SCHEMA 로 PUBLIC 스키마가 생성된다.




🍀 dbeaver 접속

1. Dbeavor 를 실행시킨다.


2. 새 데이터베이스 연결 버튼을 클릭한다.


3. select your database 창에서 PostgreSQL을 선택한다.


4. Connect to database 창이 나오면 우리가 앞서 지정했던 여러가지 connection 정보를 입력한다.


5. Connect to a database 창 하단에 Test Connection 버튼을 클릭해서 정상적으로 연결되는지 확인한다.


6. Connect to a database 창의 하단에 완료 버튼을 눌러준다.


7. 아래 그림 처럼 sql 편집기를 열어준다.


8. 테스트 해볼 sql을 짜보고 돌려본다. 나의 경우는 아래처럼 작성했다.

create sequence bbs_seq;

create table BBS(
	bbs_id numeric not null,
    name varchar(50) not null
);

alter table bbs alter bbs_id set default nextval('bbs_seq'); 

insert into bbs(name) values('공지사항');

select * from bbs;

9. 출력도 확인해본다.


10. container에서 확인해도 bbs 라는 테이블이 확인된다.


  • \l : database 의 목록을 조회한다.

  • \connect daily_code : database를 daily_code로 변경한다.

  • \dt public.* : 이 명령어는 현재 접속한 데이터베이스(DATABASE)에 있는
    스키마(SCHEMA)의 테이블을 조회할 때 사용하며, 와일드 카드를 사용할 수 있다.
    하나의 데이터베이스에 있는 모든 스키마의 테이블을 보고 싶다면 \dt *.* 라고 입력하면 된다.

참고: 현재 데이터베이스의 스키마 목록을 조회하는 법은 select schema_name from information_schema.schemata;


이로써 정상적으로 docker container 의 postgresql 를 dbeaver 로 접속하는데 성공했고,
테스트로 테이블을 작성해보았다.




🤔 굳이 이렇게 하는 이유

문득 그런 생각이 들 수도 있다.

"왜 이렇게 복잡한 과정으로 하지? 그냥 호스트 pc 에 postgresql 설치하고 쓰면 되지 않나?"

틀린 말은 아니다.

하지만 나는 개인적으로 어떤 무거운 프로그램(특히 DBMS) 를 내 호스트 PC 에 까는 게 좀 꺼려진다.

이런 무거운 프로그램이 나의 호스트 PC 의 다른 프로그램과 충돌을 일으킬 수도 있고,

재수없게 다운로드 받는 과정에서 뭔가를 잘못해서 프로그램이 계속해서 오동작을 일으킬 수도 있다.

그래서 다시 지우려고 하면 단순히 window의 [프로그램 추가/제거] 뿐만 아니라 특정 설정 정보들도 일일이 찾아서 지워야 되는 경우가 많다.

docker 를 쓰는 경우라면 어떨까?
예를 들어서 뭔가 다운 받은 이미지를 실행시켜서 잘 쓰고 있다가 어떤 설정을 잘 못 건드렸다면?

그때는 그냥 container 를 삭제하고 다시 run 해서 새로운 container를 만들면 끝이다.
그리고 만약 미리 commit 을 해서 백업도 해놨다면 더더욱 빠르게 환경을 복구시킬 수 있다.

profile
백엔드를 계속 배우고 있는 개발자입니다 😊
post-custom-banner

0개의 댓글