컨테이너 외부와 통신
- 컨테이너에서 다른 api에 http 통신을 요청한다.
- 혹은 호스트머신의 db나 api 등과 통신을 하길 원할때도 있다.
- 웹서비스가 아니라 도커 없이도 우리 컴퓨터에서 단순하게 실행되는 데이터베이스 등과 같은 것
- 혹은 다른 컨테이너에서 실행되고 있는것과 통신하길 원해.
- 다중 컨테이너로 앱을 만든다.
컨테이너(node) ←→ 호스트머신(MongoDB)
- 컨테이너 내부에서 mongoose.connect(’mongodb://localhost:port/swfavorites’ ,…) 이 부분을 localhost에서 host.docker.internal 로 바꾼다.
- 도커가 이 부분을 호스트머신의 ip주소로 변경시킨다.
- http 요청에서도 동일하게 사용가능. 예시: http://host.docker.internal:8000
컨테이너1(node) ←→ 컨테이너2(MongoDB) naive Version
- 🐳 MongoDB 컨테이너 생성
- 도커허브에서 검색
- docker run -d --name mongodb mongo
- docker container inspect mongodb
- 방금 생성한 컨테이너에 대한 정보를 보여준다.
- “Networks” : {… “IPAddress” …} : 컨테이너의 IP 주소
- node 컨테이너와 연결
- localhost 부분을 위의 컨테이너 IP 주소로 변경
네트워크
- 여러개의 컨테이너를 하나의 네트워크로 구성한다.
- 컨테이너를 생성할때 --network [network name] 옵션을 부여하여
- 볼륨과 달리 네트워크 생성은 컨테이너 생성과 동시에 가능하지 않다.
- docker network create favorites-net 과 같은 형태로 우선 생성해야한다.
- docker network ls
- docker container prune
- 중지되어있는 모든 컨테이너 제거
- 하나의 네트워크에 속한 다른 컨테이너에 접근하고자 할때는 위에서 localhost 부분을 연결을 원하는 컨테이너의 이름으로 대체한다. → mongodb
- 이제는 하드코딩하지 않아도 되네!!
- 또한 mongo와 node 컨테이너가 서로 통신하기 위한 포트를 열어주지 않아도 되네!!
도커는 소스 코드를 교체하지 않는다. 통신 요청이 있을때만 localhost, host.docker.internal, 다른 컨테이너 이름들을 실제 IP로 자동 변환 한다.
Docker 네트워크 드라이버
Docker Networks는 실제로 네트워크 동작에 영향을 미치는 다양한 종류의 '드라이버'를 지원합니다.
디폴트 드라이버는 'bridge' 드라이버입니다. 이 드라이버는 모듈에 나타난 동작을 제공합니다 (즉, 컨테이너가 동일한 네트워크에 있는 경우, 이름으로 서로를 찾을 수 있음).
드라이버는 네트워크 생성 시 --driver 옵션을 추가하여 간단히 설정할 수 있습니다.
ex) docker network create --driver bridge my-net
물론 'bridge' 드라이버를 사용하고자 하는 경우, 'bridge'가 디폴트이므로, 전체 옵션을 생략하면 됩니다.
Docker는 아래의 대체 드라이버도 지원하지만 대부분의 경우 'bridge' 드라이버를 사용합니다.
- host: 스탠드얼론 컨테이너의 경우, 컨테이너와 호스트 시스템 간의 격리가 제거됩니다 (즉, localhost를 네트워크로 공유함).
- overlay: 여러 Docker 데몬 (즉, 서로 다른 머신에서 실행되는 Docker)이 서로 연결될 수 있습니다. 여러 컨테이너를 연결하는 구식의 / 거의 사용되지 않는 방법인 'Swarm' 모드에서만 작동합니다.
- macvlan: 컨테이너에 커스텀 MAC 주소를 설정할 수 있습니다. 그러면 이 주소를 해당 컨테이너와 통신하는데 사용할 수 있습니다.
- none: 모든 네트워킹이 비활성화됩니다.
- 써드파티 플러그인: 모든 종류의 동작과 기능을 추가할 수 있는 타사 플러그인을 설치할 수 있습니다.
언급했듯이 'bridge' 드라이버는 대부분의 시나리오에 가장 적합합니다.
'Udemy-Docker-Kubernetes-2022' 카테고리의 다른 글
Udemy/Docker-Kubernetes-2022/볼륨 & ARG & ENV (0) | 2023.01.05 |
---|---|
Udemy/Docker-Kubernetes-2022/도커 기본 커맨드 & 도커 이미지 (0) | 2023.01.05 |