티스토리 뷰

728x90
반응형

도커 네트워크

도커 네트워크 구조

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

도커가 설치된 호스트에서 ifconfig 같은 명령어로 인터페이스를 확인하면 실행 중인 컨테이너 수만큼 veth로 시작하는 인터페이스가 생성된 것을 알 수 있다.

veth 인터페이스뿐 아니라 docker0이라는 브리지도 존재하는데 docker0 브리지는 각 veth 인터페이스와 바인딩돼 호스트의 eth0 인터페이스와 이어주는 역할을 한다.

example



도커 네트워크 기능

컨테이너를 생성하면 기본적으로 docker0 브리지를 통해 외부와 통신할 수 있는 환경을 사용할 수 있지만 사용자의 선택에 따라 여러 네트워크 드라이버를 쓸 수도 있다. 도커가 자체적으로 제공하는 대표적인 네트워크 드라이버로는 bridge, host, none, container, overlay가 있다.

도커에서 기본적으로 쓸 수 있는 네트워크 확인

$ docker network ls

# 더자세히..
$ docker network inspect bridge



브리지 네트워크

docker0이 아닌 사용자 정의 브리지를 새로 생성해 각 컨테이너에 뎐결하는 네트워크 구조이다.

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

$ docker network create --driver bridge mybridge

docker run 또는 create 명령어에 --net 옵션의 값을 설정하면 컨테이너가 이 네트워크를 사용하도록 설정할 수 있다.

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

ifconfig를 입력하면 새로운 IP 대역이 할당된 것을 알 수 있다. 이렇게 생성된 사용자 정의 네트워크는 docker network disconnect, connect를 통해 컨테이너에 유동적으로 붙이고 뗄 수 있다. 아래의 명령어는 mynetwork_container 컨테이너에 mybridge라는 이름의 브리지 네트워크를 끊은 뒤 다시 연결한다.

$ docker network disconnect mybridge mynetwork_container
$ docker network connect mybridge mynetwork_container

논 네트워크, 호스트 네트워크 등과 같은 특별한 네트워크 모드에는 위의 명령어를 사용할 수 없다.

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

$ 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

호스트 모드로 설정하면 컨테이너 내부의 애플리케이션을 별도의 포트 포워딩 없이 바로 서비스할 수 있다.



논 네트워크

말 그대로 아무런 네트워크를 쓰지 않는 것.

$ docker run -it --name network_none \
> --net none \
> ubuntu:14.04



컨테이너 네트워크

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

$ docker run -itd --name network_container_1 ubuntu:14.04
8f4e6bf496916dc9313715784c18eba0debce1ae41e459482a972c16cd9539ba


$ docker run -itd --name network_container_2 \
> --net container:network_container_1 \
> ubuntu:14.04
0560b9a48a699ac18678c3ee5c217be779986a424d5340383d6fc9ec5e769fe4


$ docker exec network_container_1 ifconfig

$ docker exec network_container_2 ifconfig

위와 같이 다른 컨테이너의 네트워크 환경을 공유하면 내부 IP를 새로 할당받지 않으면 호스트에 veth로 시작하는 가상 네트워크 인터페이스도 생성되지 않는다.



브리지 네트워크와 --net-alias

브리지 타입의 네트워크와 run 명령어의 --net-alias 옵션을 함께 쓰면 특정 호스트 이름으로 컨테이너 여러 개에 접근할 수 있다. 위에서 생성한 mybridge 네트워크를 이용해 컨테이너를 3개 생성해보자.

$ docker run -itd --name network_alias_container1 --net mybridge --net-alias alicek06 ubuntu:14.04
$ docker run -itd --name network_alias_container1 --net mybridge --net-alias alicek06 ubuntu:14.04
$ docker run -itd --name network_alias_container1 --net mybridge --net-alias alicek06 ubuntu:14.04

docker inspect network_alias_container1 | grep 172 이런식으로 컨테이너 3개 전부 IP 확인하고, 이 세 개의 컨테이너에 접근할 컨테이너를 생성한 뒤 alicek106이라는 호스트 이름으로 ping 요청을 전송해보자.

컨테이너 3개의 IP로 각각 ping이 전송된 것을 확인할 수 있다. 매번 달라지는 IP를 결정하는 것은 별도의 알고리즘이 아닌 라운드 로빈 방식이다. 도커 엔진에 내장된 DNS가 alicek106이라는 호스트 이름을 --net-alias 옵션으로 alicek106을 설정한 컨테이너로 변환하기 때문에 가능하다.

example



MacVLAN 네트워크

호스트의 네트워크 인터페이스 카드를 가상화해 물리 네트워크 환경을 컨테이너에게 동일하게 제공한다. MacVLAN에 연결된 컨테이너는 기본적으로 할당되는 IP 대역인 17217.X.X 대신 네트워크 장비의 IP를 할당받는다.

example

따라서 MacVLAN을 사용하는 컨테이너들과 동일한 IP 대역을 사용하는 서버 및 컨테이너들은 서로 통신이 가능하다. 자기 호스트랑은 통신이 안된다.

2대의 라즈베리파이로 테스트하면 좋음.

$ docker network create -d macvlan --subnet=192.168.0.0/24 \
> --ip-range=192.168.0.64/28 --gateway=192.168.0.1 \
> -o macvlan_mode=bridge -i parent=eth0 my_macvlan
$ docker network create -d macvlan --subnet=192.168.0.0/24 \
> --ip-range=192.168.0.64/28 --gateway=192.168.0.1 \
> -o macvlan_mode=bridge -i parent=eth0 my_macvlan

MacVLAN 네트워크를 사용하는 컨테이너 생성.

$ docker run -it --name c1 --hostname c1 \
> --network my_macvlan ubuntu:14.04

$ ip a
$ docker run -it --name c2 --hostname c2 \
> --network my_macvlan ubuntu:14.04

$ ip a

서로 ping 날려보면서 테스트하기.





출처
시작하세요! 도커/쿠버네티스(용찬호 저, 위키북스)
example

728x90
반응형
댓글
반응형
250x250
글 보관함
최근에 달린 댓글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Total
Today
Yesterday
링크