작성
·
49
0
EC2로 여러 개의 container를 docker compose up으로 배포를 하는 것은, EC2라는 가상의 컴퓨터에서 springboot, mysql, redis container를 실행시키는 것이잖아요. 이전 다른 실습에서는 springboot에서 localhost는 자기 자신의 포트를 가리키기 때문에 docker에서 container의 이름인 my-db와 my-redis-server로 바꿔주어야 한다고 하셨는데, 현재 인텔리제이에서 docker로 빌드한 이미지에는 .properties 파일과 gradle 파일을 맞춰서 작성하지 않았는데, db나 redis를 못찾는다는 에러 없이 왜 잘 돌아가는지 궁금합니다.
답변 2
0
안녕하세요 채현님 ! 질문 너무 잘 해주셨습니다 !
궁금증을 해소해드리기 위해 핵심 포인트를 기준으로 차근차근 설명드려볼게요 ~
"EC2의 docker compose up에서는 localhost를 컨테이너 이름으로 변경하지 않아도 왜 잘 돌아가나요?"
".properties 파일과 gradle 파일을 맞춰서 작성하지 않았는데, db나 redis를 못찾는다는 에러 없이 왜 잘 돌아가는지 궁금합니다."
->우선 AWS EC2의 실습에서는 이전 다른 실습들과 다르게 실제 DB 연결을 시도 하지 않아서 에러 없이 잘 돌아갑니다 !! 이전 실습에서는 start.spring.io를 통해 프로젝트를 세팅할 때 Dependencies로 Spring Boot DevTools, Spring Web, Spring Data JPA ,MySQL Driver를 선택했었고, application.yml을 작성했었죠 ~
하지만 AWS EC2 실습에서는 DB관련 Dependencies와 application.yml을 작성하지 않았습니다 ! 즉, AWS EC2에서는 컨테이너를 동시에 띄워보는 실습까지만 진행을 했고, 연결은 하지 않아서 db나 redis를 못찾는다는 에러가 나오지 않은거에요 !
추가로 더 궁금한 점 생기시면 언제든지 질문 남겨주세요 ~~ 😄😄
0
안녕하세요, 인프런 AI 인턴입니다. 임채현님이 주신 질문에 대해 설명 드리겠습니다.
Docker 컨테이너 내에서의 네트워크 설정에 대해서는 많은 분들이 헷갈려 하실 수 있습니다. Docker Compose를 사용하면 기본적으로 같은 네트워크에 있는 모든 서비스들이 서로를 서비스 이름(service name)으로 접근할 수 있는 환경을 자동으로 설정해 줍니다. 이는 각 컨테이너가 독립된 네트워크를 가지기 때문에 가능한데요, Docker는 docker-compose.yml
파일 내에 정의된 서비스 이름을 호스트명(hostname)으로 사용하여 컨테이너들 간의 통신을 지원합니다.
예를 들어, docker-compose.yml
파일에 my-db
라는 서비스가 있다면, 다른 서비스들은 my-db
라는 이름으로 이 데이터베이스 컨테이너에 접근할 수 있습니다. 그래서 보통 localhost
가 아닌 각 컨테이너의 서비스 이름을 사용하여 연결을 설정하게 됩니다.
그러나 EC2 환경에서 Docker를 설정하셨을 때 문제가 없이 작동한 이유는, 아마도 기본적인 네트워크 환경에서 Docker Compose가 자동으로 네트워크를 구성하고 서비스 이름 간의 DNS 라우팅을 지원했기 때문일 것입니다. 또는, Docker Compose의 설정이 기본적으로 작성된 방식에 의해 서로의 서비스를 올바르게 참조하도록 되어 있을 가능성도 있습니다.
아래의 질문이 유사한 문제를 설명하고 있으며, Docker Compose 환경에서의 컨테이너 연결에 대한 추가 설명을 제공합니다:
이 게시물에서는 전체 설정을 검토하여 EC2 환경에서 Docker Compose가 정상적으로 작동하도록 하는 방법을 설명하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.