Docker Network 구조
도커는 컨테이너에 NAT 내부 IP를 순차적으로 할당하며, 내부 IP는 컨테이너를 재시작 할 때마다 변경될 수 있다. 도커는 NAT를 외부와 연결하기 위해 컨테이너를 시작할 때마다 도커 엔진에서 호스트에 veth(Virtual Ethernet)라는 네트워크 인터페이스를 생성하여, docker0 브릿지와 바인딩하여 호스트의 NIC(Network Interface Card)로 eth0 인터페이스와 연결한다.
컨테이너 생성 시 기본적으로 docker0 브릿지를 통해 외부와 통신하지만, 사용자의 설정에 따라 여러 네트워크 드라이버로 대체하여 사용할 수 있다.
Docker Network Driver
•
브릿지(Bridge)
docker0가 아닌 사용자 정의 브릿지를 새로 생성하여 각 컨테이너를 연결하는 네트워크 구조. 컨테이너는 해당 브릿지를 통해 외부와 통신한다.
•
호스트(Host)
호스트의 네트워크 환경을 그대로 사용. 별도의 네트워크 드라이버를 생성하지 않고 기존의 host라는 이름의 네트워크를 사용한다.
•
논(none / null)
말 그대로 아무런 네트워크를 사용하지 않음. 네트워크 환경을 도커가 아닌 깨끗한 상태에서 직접 구축하기 위한 경우에 사용됨.
•
컨테이너(container)
다른 컨테이너의 네트워크 네임스페이스 환경을 공유하여 사용하는 구조. 내부 IP와 네트워크 인터페이스의 MAC 주소를 공유한다.
•
오버레이(overlay)
docker swarm과 같은 클러스터 환경에서 사용되며, 호스트 네트워크를 다중으로 분리하여 사용하는 구조. 여러 개의 컨테이너를 별도의 호스트 네트워크 노드들로 묶어 사용한다.