[Docker] Network

Network

도커는 각 컨테이너에 외부와의 네트워크를 제공하기 위해 컨테이너마다 가상 네트워크 인터페이스를 호스트에 생성한다. 이 인터페이스는 veth로 시작한다. veth인터페이스는 도커 엔진이 자동으로 컨테이너가 생성될 때 생성된다. 컨테이너 내부의 eth0은 호스트의 veth와 연결된다. 또한 docker0이라는 브릿지도 존재하게 되는데 이 브릿지는 각 veth인터페이스를 호스트의 eth0인터페이스와 이어주는 역할을 한다.

브릿지 네트워크

브릿지를 통해 네트워크 서브넷 게이트웨이 IP할당 범위 등을 설정할 수 있다.

—net-alias

브릿지 타입의 네트워크와 net-alias옵션을 사용하면 특정 호스트 이름으로 컨테이너 여러 개에 접근할 수 있다. 컨테이너에 접근하는 알고리즘은 Round Robbin으로 수행한다. —link와 —net-alias가 다른점은 —link는 디폴트 브릿지 네트워크 컨테이너 DNS(도커 엔진 DNS)에 의해 관리되고 —net-alias는 사용자가 정의한 브릿지 네트워크의 내장 DNS 서버를 통해 작업을 수행한다.

호스트 네트워크

네트워크를 호스트로 설정하면 호스트의 네트워크 환경을 그대로 사용할 수 있다. 그대로 사용할 수 있기 때문에 별도의 포트 포워딩 없이 바로 서비스가 가능하다.

논 네트워크

아무 네트워크도 사용하지 않고 외부와 단절된다.

컨테이너 네트워크

컨테이너 네트워크를 사용하면 다른 컨테이너의 네트워크 네임스페이스 환경(IP, Mac Address 등..)을 공유할 수 있다. 공유된 컨테이너간에는 동일한 eth0 인터페이스를 가지게 된다.

그 외..

MacVLAN 이라는 호스트 NIC를 가상화해 물리 네트워크 환경을 컨테이너에게 동일하게 제공하는 방법도 있다. 이 방법을 사용하면 네트워크 장비의 IP를 할당받아 사용할 수 있다.

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/07/20/Docker/network/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.