728x90
반응형
가상 bridge 및 가상 NIC


* Docker 컨테이너는 서버의 물리 NIC와 별도로 각 컨테이너마다 가상 NIC가 할당

* 가상 NIC는 docker0 이라는 가상 bridge에 접속하여 컨테이너끼리 통신

* 컨테이너 구동시 172.17.0.0/16 서브넷 마스크를 가진 private IP가 eth0에 자동으로 할당

* eth0 (컨테이너 이더넷)에는 호스트 OS에 생성된 가상 NIC (vethxxx)가 페어로 할당
eth0 (물리 NIC) -> docker0 (가상 bridge) -> vethxxx (가상 NIC) -> eth0 (컨테이너 이더넷)

* veth는 OSI Layer 2의 가상 네트워크 인터페이스로서 페어된 NIC끼리 터널링 통신을 수행






Docker 컨테이너 간의 통신


* 동일한 호스트상의 docker 컨테이너 구동시 private Address가 자동으로 할당되므로 컨테이너끼리 통신을 위하여 링크 기능을 사용
(링크 기능을 사용하면 한 호스트상에 여러 컨테이너끼리 통신 가능 - /etc/hosts에 등록하여 호스트 네임으로도 컨테이너 접속 가능)

* 링크 기능을 사용한 통신은 동일 호스트내에 있어야함, 즉 가상 bridge docker0에 접속한 컨테이너끼리만 가능하다는 것
(멀티 호스트 환경에서는 통신 불가능)



Docker 컨테이너와 외부 네트워크 통신


* 컨테이너가 외부와 통신하려면 bridge docker0과 호스트 OS의 물리 NIC를 통해 패킷을 전송해야하기에 docker에서는 NAPT 기능을 사용



NAPT란?


* private IP 주소와 포트번호까지 변환하는 기술을 의미



& NAT와 NAPT 차이 &


* NAT의 경우 global IP와 private IP를 1:!로 변환하기에 여러 클라이언트가 액세스할 수 없지만 NAPT의 경우 private IP와 포트 번호까지 변환하기 때문에 여러 클라이언트가 액세스할 수 있다. 예를 들어 10.0.0.22 IP를 가진 클라이언트가 라우터의 NAT로 접근할 때 다른 클리이언트는 접근이 안되지만 NAPT의 경우 뒤에 오는 포트 또한 변환하기에 10.0.0.22:5901, 10.0.0.23:5902 형식으로 여러 클라이언트가 접근 가능하다.


반응형

'Docker' 카테고리의 다른 글

Docker 기본 구성  (2) 2018.11.14
Docker 사용중인 OS를 docker image로 만들기  (0) 2018.08.24
Docker Network - Macvlan  (0) 2018.08.24
Docker Nvidia Docker 구성 (Centos 7)  (2) 2018.08.24

+ Recent posts