네트워킹 : (교차) 컨테이너 통신
어플리케이션 분석
- 엔드포인트 : 요청에 대한 응답 서비스를 사용할 수 있는(호출하는) 지점
1. 컨테이너와 로컬 호스트 머신 통신 + 웹과 통신
- 컨테이너 내부에서 웹과 통신하는 API는 별도의 설정이 필요없다.
- 컨테이너에 데이터 베이스를 담지 않고 호스트 머신의 DB와 통신할 때 요청 주소를 로컬 호스트가 아닌 host.docker.internal을 사용한다. ~ 로컬에서 실행 중인 웹서버와 통신할 때도 사용 가능
-> 컨테이너에서 볼 수 있는 로컬 호스트 머신의 IP주소로 변환된다.
2. 다른 컨테이너와 통신
- 모든 컨테이너는 한 가지 역할에만 집중하는 것이 좋다.
~ 노드 웹 API 어플리케이션, 몽고 DB 컨테이너
데이터 베이스 컨테이너는 도커 허브에서 공식 제공하는 이미지를 활용 가능
도커화된 어플리케이션에서 다른 컨테이너를 검색할 때 사용하는 명령어 : docker container inspect CONTAINER
"NetworkSettings"에서 IP주소를 찾을 수 있다.
3. IP 주소를 찾을 필요도 없는 Docker Networks
모든 컨테이너를 서로 통신할 수 있는 하나의 네트워크로 묶을 수 있다.
docker network 명령어로 관련 명령 실행 가능
docker network ls 명령어로 커스텀 네트워크뿐 아니라 디폴트 네트워크도 조회할 수 있다.
이미지 앞에 --network NAME
네트워크를 사용할 경우 해당 요청의 주소에 컨테이너 이름을 입력하면 된다.
ex) mongodb://mongodb(데이터베이스 컨테이너의 이름):27017/swfavorites
- 다수의 컨테이너는 하나의 네트워크에 있거나, 다른 컨테이너의 IP 주소를 정확히 알고 있어야 통신이 가능하다.
포트를 노출(-p)시키는 것은 로컬 머신이나 다른 네트워크에서 접근할 경우에만 필요하다 ~ 같은 네트워크에서만 접근하는 경우엔 불필요
4. 도커 네트워크가 IP 이슈를 해결하는 방법
- 도커가 요청 주소에 적혀있는 컨테이너의 이름, host.docker.internal. 하드코딩 IP를 보고 실제 IP 주소로 바꾸는 것이다. 소스코드을 대체하는 것이 아니다.
5. 도커 네트워크 드라이버
디폴트 드라이버 : Bridge ~ 이름으로 주소를 찾을 수 있게 해준다.
다른 드라이버가 필요한 경우 네트워크 생성 시 --driver NAME으로 설정할 수 있다.
대표적인 드라이버의 종류. 다만 bridge가 일반적이다.
- host: 스탠드얼론 컨테이너의 경우, 컨테이너와 호스트 시스템 간의 격리가 제거됩니다 (즉, localhost를 네트워크로 공유함).
- overlay: 여러 Docker 데몬 (즉, 서로 다른 머신에서 실행되는 Docker)이 서로 연결될 수 있습니다. 여러 컨테이너를 연결하는 구식의 / 거의 사용되지 않는 방법인 'Swarm' 모드에서만 작동합니다.
- macvlan: 컨테이너에 커스텀 MAC 주소를 설정할 수 있습니다. 그러면 이 주소를 해당 컨테이너와 통신하는데 사용할 수 있습니다.
- none: 모든 네트워킹이 비활성화됩니다.
- 써드파티 플러그인: 모든 종류의 동작과 기능을 추가할 수 있는 타사 플러그인을 설치할 수 있습니다.
'개발공부 > Docker & Kubernetes 실전 가이드 강의' 카테고리의 다른 글
Udemy : Docker & Kubernetes 실전 가이드 (6) (0) | 2023.04.11 |
---|---|
Udemy : Docker & Kubernetes 실전 가이드 (5) (0) | 2023.04.10 |
Udemy : Docker & Kubernetes 실전 가이드 (3) (0) | 2023.04.08 |
Udemy : Docker & Kubernetes 실전 가이드 (2) (0) | 2023.04.08 |
Udemy : Docker & Kubernetes 실전 가이드 (1) (0) | 2023.04.04 |