Docker Deepdive #3 - 도커 네트워크

· Infra, Docker

INFRA DEEPDIVE 시리즈 목차


가상머신과 컨테이너의 네트워크 구조의 본질적 차이

가상머신의 네트워크 레이어 구조

가상머신의 네트워크 레이어 구조

가상 머신은 User 영역 내에 가상의 Kernel 영역을 생성하고, 물리 커널 영역을 하드웨어 영역으로 인식한다. 가상 머신은 가상 네트워크 어댑터를 통해 외부와 통신하기에 가상 머신 별로 서로 다른 MAC 번호(이더넷 카드 번호)를 부여한다. VMnet0은 가상 머신들 간의 통신을 이어주고, 물리 이더넷 카드와 연결하는 브릿지 역할을 한다. 가상 Kernel 영역의 오버헤드가 크다는 이유로, 도커가 등장하게 되었다.

도커의 네트워크 레이어 구조

도커의 네트워크 레이어 구조 도커는 각 컨테이너들이 유저 영역에서 어플리케이션으로 동작하고, 커널 영역을 공유한다. 유저 영역 안에서 가상의 커널이 한 번 더 동작하는 비효율적인 구조를 개선하는 효과가 있다.

도커가 지원하는 컨테이너 네트워크 드라이버

도커는 다양한 네트워크 관리 방법을 제공하고 있고, 선택하는 모드에 따라 가상 네트워크 구성 방식이 달라진다.

기본값: docker0

도커를 설치하고 ifconfig 등의 명령어를 통해 호스트의 네트워크 인터페이스를 열어보면 docker0라는 Virtual Interface가 생성된 것을 확인할 수 있다. docker0는 도커의 디폴트 브릿지로, 컨테이너를 아무 옵션 없이 생성하면 docker0에 포함된다.
같은 브릿지 네트워크 내에 존재하는 컨테이너들은 같은 CIDR 대역의 IP를 할당 받기 때문에 단일 네트워크 내에서 통신하는 것과 동일하게 동작이 가능하다.

도커의 네트워크 레이어 구조

veth란?

컨테이너를 실행하면, 호스트에 veth가 바인딩되는 것을 볼 수 있다. veth(virtual ethernet) 인터페이스는 가상의 네트워크 인터페이스다. veth 인터페이스는 쌍으로 연결된다. 도커는 컨테이너를 실행하면 자동으로 컨테이너에 veth를 바인딩한다.

네트워크 드라이브의 종류

브릿지 네트워크 드라이버

브릿지 네트워크

docker network create -d brdige mybridge

도커 네트워크 브릿지 생성

docker run -d --net mybridge --name db redis 
docker run -d --net mybridge -e DB=db -p 8000:5000 --name web chrch/web

도커 컨테이너를 생성할 때 위에서 생성한 네트워크 브릿지를 설정

사용자 정의 브릿지와 기본 브릿지(docker0)의 차이점

오버레이 네트워크 드라이버

오버레이 네트워크

MACVLAN 드라이버

MACVLAN 네트워크

MACVLAN 네트워크이미지 출처 - alice_k106님의 블로그

참고자료