도커.. 고래가 귀엽고 컨테이너 개념이 참 재밌어서 써보기로 했다.
우선 Docker 파일을 만들어서 나의 node 앱을 실행시키는 것 까지는 이해했음, ENV설정하는법도 터득!!
그러나 문제가 생김..
mongoDB atlas 의 경우는 상관 없지만, 클라우드 로컬에 DB가 설치되어있어서 로컬DB로 실행하는 경우...?
일반적으로 로컬로 접속하듯이 mongo://127.0.0.1:27017 로 주소를 설정해두고 docker를 실행해봤지만 실패!
VM 환경에 mongodb가 깔려있든, 없든 상관없는것 같았다.
왜냐면 도커자체가 새로운 가상 환경에서 동작하기 때문에 그 컨테이너 내부에 27017포트를 사용하는 MonogoDB가 없으면 도루묵이기 때문이다.
아무튼 docker는 친절하게 이미 monogodb 환경을 만들어뒀다. 그것을 pull 받아서 good-monogodb 라는 이름으로 실행시킨다.
이제는 app 에서 몽고디비 연결하는 url에 손을 대야 한다.
바로.. 127.0.0.1 이 아니라 mongodb 라던지.. 내가 알아볼 수 있는 사인으로 string으로 적는다. 난 mongodb라고 하였다
mongodb://mongodb:27017/
아무튼 이제 다시 node 앱을 빌드하여 이미지로 만든다. 이미지의 이름은 fucked-docker 라고 치자. (이 문제때문에 굉장히 오랜 시간을 허비했기 때문)
그렇다면 내가 소유한 docker 이미지는 다음과 같다
fucked-docker -> node app
good-mongodb -> mongodb
이제 --link 라는 태그로 두 컨테이너를 연결할 것임.
이렇게 된다면 A라는 good-mongodb 컨테이너와 B라는 fucked-docker 컨테이너가 서로 연결되게 될 것이다. 그럼 B에서 27017로 접속할 수 있게될 것임!
아래 코드가 나를 구원한 코드이다.
docker run -d -p 80:3000 --link good-mongodb:mongodb fucked-docker
신기한 점은 good-mongodb:{여기부분} <= 여기부분에 적는 이름으로 해당컨테이너의 호스트네임이 정해진다는 것임. 만약 여기부분에 127.0.0.1 이라고 적고, 몽고 연결하는 url호스트에 127.0.0.1 을 적어도 된다.
암튼 이로써 두개의 컨테이너를 연결했다.
ps. '두 개의 컨테이너를 연결하는 법' 이라는 키워드를 생각하지 못해서 오래 걸린 문제임! 문제를 정확히 인지했을때 이 키워드를 생각 할 수 있었다. '아! VM환경이랑은 상관 없이, 컨테이너에 27017포트가 없구나!' 리는 깨닳음 말이다.