본문 바로가기

Docker

도커 네트워크

도커 네트워크 구조


도커는 컨테이너에 내부 IP를 순차적으로 할당하며 컨테이너를 재시작할 때마다 변경될 수 있다. 이 내부 IP는 호스트 즉 내부 망에서만 쓸 수 있음으로 외부와 통신하려면 따로 연결을 해줘야 한다. 이 과정은 호스트에 veth...라는 네트워크 인터페이스를 생성함으로써 이뤄진다. 도커는 생성된 컨테이너에 외부와의 네트워크를 제공하기 위해 가상 네트워크 인터페이스를 호스트에 생성하는데 이 인터페이스가 veth로 시작된다. 

 

컨테이너의 eth0 인터페이스는 호스트의 veth ... 라는 인터페이스와 연결됐으면 veth 인터페이스는 docker0 브리지와 바인딩돼 외부와 통신할 수 있다.

 

컨테이너를 생성하면 기본적으로 docker0 브리지를 통해 외부와 통신 할 수 있지만 여러 네트워크 드라이버를 사용 해 커스터마이즈 할 수도 있다. 

 

도커 네트워크 구조

 

브리지 네트워크


브리지 네트워크는 docker0과 비슷한 네트워크로 사용자 정의 브리지 네트워크를 생성할 수 있는 네트워크이다.

 

다음 명령어로 새로운 브리지 네트워크를 생성한다.

 

docker network create --driver bridge mybridge

 

생성된 mybridge 브리지 네트워크를 컨테이너와 연결시킬 수 있다. --net 옵션의 값을 설정해 컨테이너가 이 네트워크를 사용하도록 설정한다.

 

docker run -it --name mynetwork_container --net mybridge ubuntu:14.04

 

이렇게 생성된 사용자 정의 네트워크는 docker network disconnect, connect를 통해 컨테이너에 유동적으로 붙이고 뗄 수 있다.

 

docker network disconnect mybridge mynetwork_container
docker network connect mybridge mynetwork_container
특정 IP 대역을 갖는 네트워크 모드에만 disconnect, connect 명령어를 사용할 수 있다.

 

네트워크의 서브넷, 게이트웨이, IP 할당 범위 등을 임의로 설정하려면 네트워크를 생성할 때 아래와 같이 옵션들을 추가해야 한다. 단 --subnet과 --ip-range는 같은 대역이어야 한다.

 

docker network create --driver=bridge \
--subnet=172.72.0.0/16 --ip-range=172.72.0.0/24 --gateway=172.72.0.1 my_custom_network

 

호스트 네트워크


네트워크를 호스트로 설정하면 호스트의 네트워크 환경을 그대로 쓸 수 있다.

 

docker run -it --name network_host --net host ubuntu:14.04

 

컨테이너의 내부에서 네트워크 환경을 확인하면 호스트와 같다. 컨테이너의 네트워크를 호스트 모드로 설정하면 컨테이너 내부의 애플리케이션을 포트 포워딩 없이 서비스할 수 있다.

 

컨테이너 네트워크


--net 옵션으로 container를 입력하면 다른 컨테이너의 네트워크 네임스페이스 환경을 공유할 수 있다. 공유되는 속성은 내부 IP, 네트워크 인터페이스의 맥(MAC) 주소 등이다.

 

### 컨테이너 실행
docker run -itd --name network_container_1 ubuntu:14.04

### --net 옵션으로 컨테이너 환경 공유
docker run -itd --name network_container_2 --net container:network_container_1 ubuntu:14.04

이런 식으로 컨테이너 네트워크 환경을 공유하면 eth0에 대한 정보가 완전히 같아진다.

'Docker' 카테고리의 다른 글

도커 이미지 관리  (0) 2021.09.11
컨테이너 자원 할당 제한  (0) 2021.09.11
도커 볼륨  (0) 2021.09.10
도커 실행 옵션 정리  (0) 2021.09.09
도커 이미지와 컨테이너  (0) 2021.09.09