이 게시물은 제가 이전에 관리하던 티스토리 블로그에서 가져온 글입니다.
추천: velog는 화면의 글자가 굉장히 크게 나옵니다.
zoom out을 좀 하고 읽는 걸 추천합니다 ^^;
최근 생활코딩님의 docker 입문 강좌 덕분에 관련된 몇 가지를 테스트해봤다.
참고로 생활코딩님의 docker 입문 영상은 아래 주소를 참조하자.
https://www.youtube.com/watch?v=Ps8HDIAyPD0&list=PLuHgQVnccGMDeMJsGq2O-55Ymtx0IdKWf
이 게시물도 몇 가지 테스트 중 하나였는데, 나중에 써먹을 수 있을 거 같아서 기록한다.
이 테스트의 목표!
지금부터 그 과정을 알아보자.
Window Terminal
(power-shell 또는 cmd 를 써도 무관)Window Terminal 을 다운로드 받고 싶으면 아래 주소로 가면 된다.
https://www.microsoft.com/ko-kr/p/windows-terminal/9n0dx20hk701?activetab=pivot:overviewtab
도커를 통해서 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 스키마가 생성된다.
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 을 해서 백업도 해놨다면 더더욱 빠르게 환경을 복구시킬 수 있다.