타임트리

도커의 가상 네트워크 본문

Today I Learned/Docker

도커의 가상 네트워크

sean_j 2025. 5. 3. 01:17

도커는 컨테이너 간/외부와의 통신을 위해 가상 네트워크를 사용한다. 가상 네트워크는 물리적인 네트워크 장비 없이, 하나의 서버 내에서 논리적으로 정의된 네트워크이며, 이 네트워크 망안에서 컨테이너들끼리 서로 통신하거나 외부의 서버와도 통신할 수 있다.

 

도커를 설치하면 기본적으로 가상의 브릿지 네트워크인 docker0가 자동으로 생성한다. 이 가상의 라우터/공유기 역할을 하는docker0 브릿지는 172.17.0.1의 가상 IP 주소를 할당 받는다. (보통 공유기가 192.168.0.1의 사설 IP를 할당 받듯이). 그리고 컨테이너가 실행될 때, 이 브릿지 네트워크 범위 내에서 고유한 IP 주소를 자동으로 할당한다.

 

예를 들어, 컨테이너 A를 실행하면, docker0의 네트워크의 주소 범위에서 A에게 IP 주소가 부여된다. 이후 또 다른 컨테이너 B를 실행하면, B 역시 같은 브리지 네트워크에서 IP를 할당받는다. 이 경우 컨테이너 A와 B는 같은 네트워크에 있으므로, 서로의 IP 주소를 통해 직접 패킷을 주고받을 수 있다.

 

도커 내의 가상 네트워크가 어떻게 구성되는지 아래 그림을 통해 살펴보자. (Host는 내 PC라고 가정)

 

 

  • 현재 내 PC는 공인 IP를 받아 공유기를 통해 사설 IP 192.168.0.2를 받은 상황이라고 가정하자.
  • 도커는 Host OS에 docker0라는 가상 브릿지 인터페이스를 한 개 생성한다.
  • 컨테이너가 해당 네트워크 브릿지에 생성될 때마다 Veth라는 접두어를 붙여 veth pair라는 형태의 가상 인터페이스가 생성된다.
  • 각 컨테이너는 해당 인터페이스를 통해 docker0와 연결되며, 브릿지 내부에서 패킷이 전송된다.
    • 예를 들어, Host OS에서 veth3 인터페이스로 네트워크 신호를 보내면 이는 컨테이너 C로 전달된다.
  • Container C에서 172.17.0.3(컨테이너 B의 IP)으로 요청을 보내면,
    • Host OS의 Kernel SW인 iptables 규칙을 통해 veth3 -> veth2 경로로 전달된다.
    • iptables 규칙은 도커가 컨테이너를 생성하거나 삭제할 때 자동으로 관리한다.

 

 

 

---

출처 - 인프런 개발자를 위한 쉬운 도커(https://inf.run/Apgvc)