본문으로 바로가기

 

docker를 최근 생활코딩님께서 완전 입문 강좌를 열어줘서 설치해보고 몇 가지 테스트를 해보고 있다. 
참고로 생활코딩님의 docker 입문 영상은 아래 주소를 참조하자. 

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

이 글도 몇 가지 테스트 중 하나이다.
이번 테스트는 docker를 통해서 postgresql 가 설치된 image를 통해서 container를 생성한 후에
dbeaver 를 통해서 container 에 있는 postgresql dbms 에 접근하는 것이다.

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

 

 

🍀 나의 테스트 환경

  • OS : window 10(Home Edition)
  • Docker 버전 : version 20.10.8, build 3967b7d
  • DBeaver 버전: 21.2.0
  • CLI 프로그램: Window Terminal (power-shell 또는 cmd 를 써도 무관)

Window Terminal 을 다운로드 받고 싶으면 아래 주소로 가면 된다. 

https://www.microsoft.com/ko-kr/p/windows-terminal/9n0dx20hk701?activetab=pivot:overviewtab

 

 

🍀 docker Postgresql image run

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

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

그런데 docker run 명렁어를 입력할 때 호스트 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 가 정상적으로 동작하는지 확인해보자.

ls -al 입력시 표출된 모습 

 

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

psql -U postgres

 

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

아무튼 이렇게 해서 postgres 가 제공하는 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 database 창 하단에 Test Connection 버튼을 클릭해서 정상적으로 연결되는지 확인한다.

정상 접속

 

6. Connect to 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;

 

쿼리 결과는 아래와 같다.

 

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 을 해서 백업도 해놨다면 더더욱 빠르게 환경을 복구시킬 수 있다.