Docker Network

이주희·2022년 10월 26일
1

Docker

목록 보기
8/16

컨테이너의 네트워크 인터페이스에는 eth0lo네트워크 인터페이스가 있다.

도커는 컨테이너에 내부 IP를 순차적으로 할당하며, 이 IP는 컨테이너를 재시작할 때마다 변경될 수 있다.
내부 IP는 도커가 설치된 호스트, 즉 내부 망에서만 쓸 수 있는 IP이므로 외부와 연결될 필요가 있다.
이 과정은 컨테이너를 시작할 때마다 호스트에 veth~라는 네트워크 인터페이스를 생성함으로써 이뤄진다.
veth; virtual eth

도커는 각 컨테이너에 외부와의 네트워크를 제공하기 위해 컨테이너마다 가상 네트워크 인터페이스를 호스트에 생성하며 이 인터페이스의 이름은 veth로 시작한다.
veth 인터페이스는 사용자가 직접 생성할 필요 없이 컨테이너가 생성될 때 도커 엔진이 자동으로 생성한다.
실행 중인 컨테이너 수만큼 veth로 시작하는 인터페이스가 생성된다.


1. 컨테이너와 호스트의 네트워크 구조

eth0

공인 IP 또는 내부 IP가 할당되어 실제로 외부와 통신할 수 있는 호스트의 네트워크 인터페이스

veth ~

veth로 시작하는 인터페이스는 컨테이너를 시작할 때 생성되며, 각 컨테이너의 eth0과 연결된다.

docker0

docker0 브리지는 각 veth 인터페이스와 바인딩돼 호스트의 eth0 인터페이스와 이어주는 역할을 한다.


2. 도커 네트워크 기능

// 네트워크 목록 확인하기
docker network ls

  • 컨테이너를 생성하면 기본적으로 docker0 브리지를 통해 외부와 통신할 수 있는 환경을 사용할 수 있지만,
    사용자의 선택에 따라 여러 네트워크 드라이버를 쓸 수도 있다.

  • 도커가 자체적으로 제공하는 대표적인 네트워크 드라이버로는 bridge, host, none, container, overlay가 있다.

  • 아무런 설정을 하지 않고 컨테이너를 생성하면 자동으로 docker0 브리지를 사용한다.

2-1. 브리지 네트워크

// 새로운 브리지 네트워크 생성
docker network create --driver bridge mybridge

// mybridge 네트워크를 사용하는 컨테이너 생성
docker run -i -t
--net mybridge

// 브리지 네트워크 끊기
docker network disconnect mybridge 컨테이너명

// 다시 연결
docker network connect mybridge 컨테이너명
  • docker0이 아닌 사용자 정의 브리지를 새로 생성해 각 컨테이너에 연결하는 네트워크 구조이다.

  • 컨테이너는 연결된 브리지를 통해 외부와 통신할 수 있다.

  • 사용자 정의 네트워크는 유동적으로 붙이고 뗄 수 있다.


2-2. 호스트 네트워크

docker run -i -t 
--net host
  • 네트워크를 호스트로 설정하면 호스트의 네트워크 환경을 그대로 쓸 수 있다.

  • 별도로 생성할 필요 없이 기존의 host라는 이름의 네트워크를 사용한다.

  • 컨테이너 내부의 애플리케이션을 별도의 포트 포워딩 없이 바로 서비스할 수 있다.


2-3. 논 네트워크

docker run -i -t 
--net none
  • 아무런 네트워크를 쓰지 않는다.

  • 외부와 연결이 단절된다.


2-4. 컨테이너 네트워크

docker run -i -t 
--net container:[다른 컨테이너의 ID]
  • 다른 컨테이너의 네트워크 네임스페이스 환경을 공유한다.
    (공유되는 속성: 내부 IP, 네트워크 인터페이스의 맥(MAC) 주소 등)

  • 내부 IP를 새로 할당받지 않으며 호스트에 veth로 시작하는 가상 네트워크 인터페이스도 생성되지 않는다.


2-5. 브리지 네트워크와 --net-alias

docker run -i -t --name container1
--net mybridge
--net-alias alicek106
ubuntu:14.04

docker run -i -t --name container2
--net mybridge
--net-alias alicek106
ubuntu:14.04

docker run -i -t --name container3
--net mybridge
--net-alias alicek106
ubuntu:14.04
  • 브리지 타입의 네트워크와 run 명령어의 --net-alias 옵션을 함께 쓰면 특정 호스트 이름으로 컨테이너 여러 개에 접근할 수 있다.

2-6. MacVLAN 네트워크

docker network create 
-d macvlan						// 네트워크 드라이버로 macvlan을 사용한다는 것을 명시 (`--driver`)
--subnet=192.168.0.0/24 		// 컨테이너가 사용할 네트워크 정보 입력
--ip-range=192.168.0.64/28 		// 호스트에서 사용할 컨테이너의 IP 범위 입력
--gateway=192.168.0.1			// 네트워크에 설정된 게이트웨이 입력
-o macvlan_mode=bridge -o parent=eth0 my_macvlan	// 추가적인 옵션 설정
  • MacVLAN은 호스트의 네트워크 인터페이스 카드를 가상화해 물리 네트워크 환경을 컨테이너에게 동일하게 제공한다.

  • MacVLAN을 사용하면 컨테이너는 물리 네트워크상에서 가상의 맥(MAC) 주소를 가지며, 해당 네트워크에 연결된 다른 장치와의 통신이 가능해진다.

  • MacVLAN을 사용하는 컨테이너들과 동일한 IP 대역을 사용하는 서버 및 컨테이너들은 서로 통신이 가능하다.

profile
🍓e-juhee.tistory.com 👈🏻 이사중

1개의 댓글

comment-user-thumbnail
2022년 10월 29일

docker network 관해서 더 자세하게 알고가네요

답글 달기