트센::DB::docker-postgresql

YP J·2023년 2월 15일
0

42transcendence::

목록 보기
1/2

docker 에 postgresql 실행후 로컬 db관리 툴이랑 연결하기

  • 도커 허브에 있는 postgres 이미지를 가져오기

  • docker pull postgres

  • 가져오고
    docker run -d -p 5432:5432 -e POSTGRES_PASSWORD="123" --name <containername> postgres

  • (1) docker run : docker image에서 container를 생성한다.

  • (2) –name PostgreSQL01 : container의 이름은 PostgreSQL01로 한다.

  • (3) -p 5432:5432 : 해당 container의 port forwarding에 대해 inbound/outbound port 모두 5432으로 설정한다.

  • (4) -e : container 내 변수를 설정한다.

  • (5) POSTGRES_PASSWORD=”암호” : ROOT 암호를 설정 따옴표 내의 내용은 암호이다.

  • (6) -d postgres : postgres이라는 이미지에서 분리하여 container를 생성한다.


  • postgres 깔려있는 컨테이너 안에서 Postgres DB db 에 들어가려면
    psql -U postgres

  • 를 치면 되는데

    난 postgres 라는 DB를 만든적이 없는데 default 로 생기는 건가?

  • 전체 데이터베이스 이름 출력

SELECT datname FROM pg_database;
  datname  
-----------
 postgres
 template1
 template0
(3 rows)
  • 사용자가 만든 데이터베이스 이름만 출력
SELECT datname FROM pg_database WHERE datistemplate = false;
 datname  
----------
 postgres
(1 row)

여기서 template1 ,0  은 뭐지 ? 글고 난 이름이 postgres라는 데이터베이스 만든적이 없는데??
의심해볼만한게 docker run 할때 마지막 인자에 postgres 인데 이건 이미지로부터 컨테이너 실행하는 인자 이다.
그럼 디폴트로 생긴거가 ?

  • 처음 postgres  들어갈때 psql -U postgres 인 유저로 들어가는거닌까 들어가서 모든 유저를 출력해 봤다.
  • postgres 유저로 postgresql 에 들어와서 \du( 모든 유저 확인) 해보면
  • ((select *from pg_shadow;) 가 더 정보 많이 보여줌)
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
  • 이렇게 나온다.

  • 그럼 유저를 추가해보고 psql -U 만든유저이름 으로 postgres에 접속해보자.

  • create user test1 password '123'; 으로 아무 권한 없는 유저를 만들어 봤다

                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 test1     |                                                            | {}
  • 그리고 다시 postgres 에 test1유저로 접속하려 하니 권한 문제로 거절 되었다

  • 그럼 유저에 super권한 줘보고 다시 들어가보자.

  • 그래도 안 들어가 진다.

  • 즉, 터미널에서 postgres 에 들어가는 법은 디폴트로 있는 postgres로 들어가는 법 밖에 없나 ?

  • 아~ 일단 psql -U postgres 하면 postgres 유저로 postgres라는 이름의 db 에 들어가는거구나 .

tip brew 로 설치한 postgresql 에서 db 에 들어가려면
psql postgres 치면 들어가진다.

profile
be pro

0개의 댓글