해결된 질문
작성
·
174
1
수강 중에 개인적인 궁금증이 생겨 질문드립니다.
Leafy 애플리케이션에서 네트워크를 새롭게 만든 주요 이유가 기본 네트워크에서는 DNS 기능을 제공하지 않기 때문에 즉, 컨테이너가 종료되고 다시 실행될 때 IP가 바뀌게 되어 DB로 연결이 안되는 상황이 발생할수 있다고 하셨습니다.
그렇다면 백엔드 에서 DB 호스트 URL을 localhost로 연결을 하면 굳이 DNS 기능을 사용 하지 않아도 될꺼같다는 생각이 듭니다. 예를 들어 EC2 서버 하나에 실습 서버인 백/프론트/DB 컨테이너를 띄울 경우 입니다 !
혹시 각각 다른 EC2 서버 3대에 각각의 컨테이너를 띄워 배포하는 경우에는 DNS 기능이 필요하니 이럴 때를 위해 네트워크를 생성해서 세팅을 해야 할까요 ?
답변 1
0
kasaxat183님 안녕하세요. 데브위키입니다.
각각의 컨테이너에서 localhost로 요청을 전송하면 '컨테이너 자신'으로 요청이 전달됩니다! 각각의 컨테이너도 고유한 IP를 가지고 있는 가상화 서버이기 때문에 컨테이너 간 통신에서 localhost를 활용할 수 없습니다.
localhost는 상대적인 개념입니다. 실습PC(호스트OS)에서 localhost를 사용하면 실습PC로 요청이 전달됩니다. 여기서 포트포워딩을 통해 각각의 백/프론트/DB 컨테이너로 전달되는 것이지요.
그런데 컨테이너 내부에서 localhost로 요청을 보내면, 실습 PC로 요청이 전달되는 것이 아닌 컨테이너 자신에게 요청이 전달됩니다! 그래서 백엔드 컨테이너에서 localhost:5432로 요청을 보내도 백엔드 컨테이너에는 5432포트에 대한 설정이 없기 때문에, 요청이 실패하게 됩니다.
각각 다른 EC2 서버 3대에 각각의 컨테이너를 띄워 배포하는 경우는 복잡합니다.
도커는 서버 한 대의 가상화에 초점을 맞춘 기술입니다. 그래서 여러 대의 서버에서 도커를 사용하려면 추가 도구가 필요합니다.
이렇게 서버가 2대 이상일 경우 Kubernetes 를 사용한다고 보시면 될 것 같습니다. 😀
강의 들으시면서 더 궁금하신 부분이 있으면 편하게 질문주세요!
와..........정말 정말 너무 상세한 답변 너무 감사합니다 !!
너무 유익한 강의 같습니다 ㅎㅎ
제가 이해를 못해 찝찝해서 두서없이 질문한 부분을 이렇게 명료하게 설명을 해주시다니..너무너무 감사합니다 !
추가 질문이 있는데 실습 저의 개인 맥북 PC에서 Nestjs 서버를 돌리고 있고 Nestjs에서 첨부한 사진과 같이 docker컨테이너로 mysql을 실행 시켜 늘 localhost로 hosturl을 연결해서 사용 했습니다.
이 경우에는 왜 컨테이너 id를 url로 사용하지 않아도 사용이 된걸까요 ?
컨테이너로 nestjs를 돌리는게 아니라 외부 연결로 간주되어 그런걸까요 ..?