📍 pgAdmin을 사용하게 된 이유
원래도 PostgreSQL을 컴퓨터에 직접 설치하지 않고 Docker에 이미지를 띄워 사용했는데 콘솔창을 어떻게 만져도 테이블이 너무 더럽게 보여서 고생이었다... 그래서 다음 프로젝트 때는 꼭 GUI 사용해야지! 하고 알아보니 다음과 같이 3가지가 있었다.
- pgAdmin4
- DataGrip
- Sequel Pro
모두 다 설치형이었는데 pgAdmin이 Docker에 띄워서 사용할 수 있다고 해서 pgAdmin 사용하기로 결정!
📍 Docker-compose 파일 작성하기
https://codemasterkimc.tistory.com/700
이 글을 참고하여 docker-compose 파일을 작성했는데 에러 아닌 에러가 떴다.
the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
대충 version 어튜리뷰트 이제 더 사용 안 하니까 무시하고 진행하긴 할건데 혹시나 충돌할지 모르니 지우라는 내용.
그래서 저 부분만 지우고 다시 만들었다.
services:
pgadmin:
image: dpage/pgadmin4:latest
container_name: pgadmin-container
ports:
- "5050:80"
environment:
- PGADMIN_DEFAULT_EMAIL=admin@example.com
- PGADMIN_DEFAULT_PASSWORD=admin123
파일 설명 →
- services : # 서비스명
- image : # 사용할 이미지
- container_name : # 컨테이너명 설정
- ports : # 포트 번호 설정 ( 컨테이터 내부 : 컨테이너 외부 )
- environment : # 환경 변수 설정
📍 Docker-compose 파일 실행
docker-compose up -d
docker-compose 파일이 작성된 위치로 이동해 위와 같은 커맨드를 입력하면
pgAdmin을 Docker에 띄울 수 있다!
이제 http://localhost:5050 으로 접속하면 위와 같이 pgAdmin 페이지가 뜨고 아까 docker-compose 파일에 적어뒀던 이메일과 비밀 번호를 사용해 로그인을 해주면 된다.
처음 접속 시 어떤 서버도 등록되어 있지 않은 상태이므로 서버 추가를 해줘야한다.
General - Name 에는 본인이 설정하고 싶은 서버 이름을 임의로 적는다.
Connection - Host name/address에는 localhost로 적으라고 되어 있어서 적었다가 IP를 찾을 수 없다고 에러가 떠서 직접 IP 주소를 넣어주었다.
차례대로 컨테이너 이름과 PostgreSQL 생성시 설정한 유저 이름과 비밀 번호를 입력해주면 서버가 잘 등록 됨을 확인 할 수 있다.
❓ 왜 localhost를 적을 수 없는걸까?
localhost와 127.0.0.1 둘 다 적어봐도 연결 할 수 없다고 떠서 알아봤다...
docker inspect "컨테이너 ID"
먼저 위와 같은 명령어로 해당 컨테이너의 IP 주소를 확인해 봤다.
IP 주소가 0.0.0.0 이 나온다...
Docker에 대해 제대로 공부하지 않고 겉핥기식 사용만 하다보니 생긴 의문점이다.
📍 Docker Network
Docker는 로컬에서 실행시킨다고 해도 실제 컨테이너들은 Docker가 만든 "가상 환경" 내에서 IP 주소를 부여받고 실행된다.
이 IP 주소들은 가상 환경 내에서만 유효하기 때문에 Docker 내의 컨테이너들끼리는 서로 문제없이 통신 가능하지만 특별한 네트워크 설정(포트 매핑) 없이는 Docker에서 로컬 시스템으로의 통신은 불가능하다.
따라서 Docker 컨테이너로 실행 중인 PostgreSQL을 로컬 환경의 웹 브라우저에서 사용하려면 로컬 환경의 정확한 IP 주소를 입력해주거나 host.docker.internal 을 사용해야한다.
host.docker.internal은 Docker가 제공하는 DNS이며 자동으로 호스트 머신의 IP 주소로 해석한다.
(windows와 mac에서만 사용 가능)
IP 주소를 직접 넣는 방법보다는 host.docker.internal을 사용하는 것이 나은 것 같다!
참고한 스택 오버플로우 출처 :
https://github.com/khezen/compose-postgres/issues/6
📍 결과
맨 위에 콘솔창으로 확인했던 p_products 테이블을 훨씬 깔끔하게 조회할 수 있게 되었다!
'DevOps' 카테고리의 다른 글
[✉️ Kafka] Kafka 이해하기2 - Zookeper, Broker, Message (2) | 2024.09.27 |
---|---|
[✉️ Kafka] Kafka 이해하기1 - Producer, Consumer, Topic, Partition (0) | 2024.09.27 |
Redis와 NoSQL, Redis의 데이터 타입 이해하기 (0) | 2024.08.21 |
Dockerfile & Docker Compose 사용하기 (0) | 2024.08.20 |
CI/CD와 Docker 이해하기 (0) | 2024.08.17 |