Jaeilit

도커에 디비 연결하고 데이터 넣기 본문

TIL

도커에 디비 연결하고 데이터 넣기

Jaeilit 2022. 7. 15. 14:46
728x90

도커에 디비연결하기가 너무 힘들었따.

아 아니.. 연결자체는 어렵지 않았지만 연결한걸 외부 cli 에서 접속하는게 어려웠다...

 

아직 db가 뭔지를 잘 모르니까 유저네임이 뭔지... db 네임이 뭔지.. 많이 해맨거같다.

 

일단,

 

파이썬 dockerfile 이다.

여기서도 도전적인 부분이

파이썬을 이용해서 크롤링 + DB 연결해서 sql 로 넣었다는것도 도전적이지만 그런 휘발성 지식말고

진짜 기억해야할 부분에서의 도전적인 부분은 pip3 install -r requirements.txt 부분이다.

물론 이 부분도 난 더이상 파이썬을 쓰지 않을 것이기 때문에 다시 생각해보면 이게 더 휘발성이인거 같다....

 

신기해서 그냥 적고싶었던걸로 하자.

pip freeze > requirements.txt

약간 npm install 과 같이 패키지 파일들을 한번에 받을 수 있는 건데

위의 코드를 터미널에 입력하면 requirements.txt 에 사용했던 패키지 파일들 목록이 버전까지 함께 만들어진다.

이걸 이제 도커파일에서 npm install 처럼 사용해주면 된다. 간편~

 

그 다음에 정말 기억해야 할 부분이 있다.

 

DB 를 도커로 띄우고 도커 안에서 DB 접속해서 크롤링 데이터를 넣는 것

 

1. 도커 이미지를 받아온다.

docker pull postgres

2. 받아온 이미지를 컨테이너로 띄워준다.

docker run -d -p 5432:5432 --name pgsql -e POSTGRES_PASSWORD=1234 -v pgdata:/var/lib/postgresql/data postgres

패스워드, 혹은 나중에 유저까지 넣게 된다면 환경변수로 넣어주는 것이 좋지만 일단 이렇게 진행하겠음

여기서 볼륨을 사용하는데 컨테이너는 날라가는 순간 데이터가 같이 날라가기 때문에 볼륨을 사용해주는것이 좋다.

볼륨을 안만들었다면 볼륨을 먼저 만들어주도록 하자.

 

2-1 볼륨 만들기

docker volume create pgdata

 

도커 run 을 데몬버전?으로 열었기 때문에 터미널을 사용 할 수 있는데

DB 가 잘 열려있는지 확인해보자,

 

2-2 DB 컨테이너 동작 확인

docker exec -it pgsql bash

저는 이미 testuser 라는 유저를 만들어놓았기 때문에 \du 명령어로 유저를 검색해도 나옵니다.

볼륨을 사용하기 때문에 컨테이너를 껏다 켜도 저 유저는 지워지지않고 살아있어요

 

2-3 네트워크 확인

docker ps or docker ps -a
// 컨테이너 id 확인

docker inspect 컨테이너ID | grep IPAddress.
// network 주소 확인

아직 잘은 모르겠으나 보통 디폴트가 172.17.0.2 인거 같다..

예전에 여러번 열면 ip가 유동적으로 변했던거 같은데 이 네트워크가 아니라 다른 네트워크였던거같다.

 

여기서부터가 해맨 부분인데,

 

도커로 DB는 띄웠으나

어떻게 DB 에 접속해서 데이터를 넣는가가 문제였는데

 

일단 외부 cli 에서 연결하는 부분을 보자.

 

3-1 외부 db cli 연결

 

지금 postgres cli 로 postico 를 사용 중인데,

닉네임? 아무거나 적어도 된다.

 

host? localhost 이다 이 부분에서 172.17.0.2 적고 왜 안되냐 비밀번호가 틀렸냐 생각하면서 오전을 다 보냈다.

가만 생각 해보면 host 는 localhost 가 맞다..

 

포트는 기본포트 5432를 docker run 할때 포워딩을 5432:5432로 해줬으니 어쨋거나 저쩃거나 5432 이다.

 

user 이 부분에서도 dbname 을 적다가 왜 안되냐.. 했었다.. 아까 testuser 이게 유저네임인데 아직 db 구조가 어쨋고 유저가 뭔지 디비네임이 뭔지를 잘 몰라서 많이 해맨거 같다. sql 문으로 create 했던 name을 넣으면 된다.

 

password docker run 할때의 password

 

database 말그대로 dbname.,,,,

 

저 항목들의 답은 아까 위의 bash 부분에서 postgres 명령어를 해보면 바로 알 수 있는데

 

database 는

\l  명령어로 list 를 볼 수 있고

 

user 는

\du 명령어로 볼 수 있다.

 

해매지말자 다시는!

 

이제 파이썬코드에서 db 접속하는 방법!

네트워크를 활용해야하는 줄 알았는데

아까 cli 에 입력했던 dbname user 등과 host 에서는 db host가 아까 net 주소를 넣어주면 아무문제 없이 된다.!

 

이제 환경변수와 스케줄러를 보면 될 것 같다.

728x90

'TIL' 카테고리의 다른 글

ec2 스케줄러 테스트  (0) 2022.07.18
ec2 - db(postgres sql , RDBS) 연결  (0) 2022.07.18
pqsl db 생성  (0) 2022.06.22
nginx 로컬에서 띄우기  (0) 2022.06.16
콘텐츠 보안정책(CSP) - XSS 공격 방어(2)  (0) 2022.06.14