Docker Network

Evie·2024년 12월 4일
post-thumbnail

Docker Network

Docker Network는 도커 컨테이너 간의 통신을 관리하는 일종의 논리적 네트워크입니다.
여러 컨테이너를 사용하는 애플리케이션에서는 같은 네트워크로 컨테이너들을 묶어 서로 간편하게 통신할 수 있도록 만드는 것이죠.

구조

Docker는 컨테이너가 생성될 때마다 각 컨테이너에 172.17.0.*의 IP를 순차적으로 할당합니다. 이 IP는 재시작할 때마다 변경되고, 따로 설정하지 않을 경우 생성된 IP는 외부에서 접근이 불가능합니다. 외부에 노출시키려면 포트 바인딩이 필요해요.

Host에서는 eth0에 대응하는 veth를 생성해 외부와 네트워크를 연결합니다. 이 veth는 Docker Engine이 자동으로 생성합니다.

네트워크 드라이버를 따로 지정하지 않을 경우 기본으로 docker0을 브릿지 네트워크로 사용해서 호스트의 eth0 네트워크와 veth를 연결합니다.

VETH

리눅스의 Virtual Ethernet을 의미합니다.

컴퓨터 네트워크 기술 중 하나로, LAN / MAN / WAN에서 가장 많이 활용되는 기술 규격입니다. 물리 계층에서 신호 및 배선, 데이터링크 계층에서 MAC 패킷과 프로토콜 형식을 담당해요.

컨테이너로 구동된 애플리케이션은 물리적 네트워크를 구성할 수 없기 때문에, 실제 컴퓨터의 NIC를 사용하는 것이 아니라 가상의 네트워크 인터페이스를 생성합니다.

패킷을 전달받으면 자신에게 연결된 다른 인터페이스로 패킷을 전송하기 때문에 항상 쌍으로 생성됩니다. veth는 한 쪽이 불능 상태가 되면 다른 쪽도 작동하지 않습니다.

Docker에서는 실행 중인 컨테이너의 수만큼 veth가 생성됩니다.

종류

  • Bridge
    • 따로 종류를 설정하지 않을 경우 기본적으로 Bridge 타입으로 설정
  • Host
    • veth를 사용하지 않고 호스트와 네트워크를 공유
    • 포트 바인딩이 필요 없으며 직접적으로 접속 가능
  • None
    • 아무런 네트워크에도 연결하지 않음. 로컬호스트 (lo) 외에는 연결되지 않는다.
  • Overlay
    • 주로 오케스트레이션에 사용되는 멀티 호스트 네트워크
    • 여러 노드에 위치한 컨테이너 간의 통신에 사용
  • 3rd Party
    • 외부 플러그인을 사용

마무리

참고 자료

profile
끄적그적

0개의 댓글