[docker] docker 네트워크 - 네트워크 드라이버 (3)

업데이트:     Updated:

카테고리:

태그:

🎯네트워크 드라이버 종류

  • bridge
  • overlay
  • host
  • Macvlan
  • none

이번 포스트에서는 이전 포스트에서 다루지 않은 host,IPvlan,Macvlan,none 네트워크 드라이버에 대해 알아본다.

host

  • 컨테이너에 대해 host 네트워크 모드를 사용하는 경우 해당 컨테이너의 네트워크는 Docker 호스트에서 격리되지 않으며 컨테이너에 자체 IP 주소가 할당되지 않습니다.
  • 예를 들어 포트 80에 바인딩되는 컨테이너를 실행하고 host 네트워킹을 사용하는 경우 호스트 IP 주소의 포트 80에서 컨테이너의 애플리케이션을 사용할 수 있습니다.
  • host 네트워킹 드라이버는 Linux 호스트에서만 작동합니다.
  • Swarm 서비스에 host 네트워크를 사용할 수도 있습니다. 이 경우 제어 트래픽(Swarm 서비스 관리와 관련된 트래픽)은 여전히 오버레이 네트워크를 통해 전송되지만 개별 Swarm 서비스 컨테이너는 Docker 데몬의 호스트 네트워크 및 포트를 사용하여 데이터를 전송합니다.

Note:

host 모드 네트워킹을 사용할 때 컨테이너에 자체 IP 주소가 없는 경우 포트 매핑이 적용되지 않고 -p, --publish, -P, --publish-all 옵션이 무시되고 경고가 발생합니다.

WARNING: Published ports are discarded when using host network mode

Macvlan

  • macvlan 네트워크 드라이버를 사용하여 각 컨테이너의 가상 네트워크 인터페이스에 MAC 주소를 할당하여 물맂거 네트워크에 직접 연결된 물리적 네트워크 인터페이스처럼 보이게 할 수 있습니다.
  • 이 경우 macvlan에 사용할 Docker 호스트의 물리적 인터페이스와 macvlan의 서브넷 및 게이트웨이를 지정해야 합니다.
  • 또한 다른 물리적 네트워크 인터페이스를 사용하여 macvlan 네트워크를 격리할 수도 있습니다.

Note:

macvlan 네트워크 드라이버를 사용하기 위해서는 네트워킹 장비는 하나의 물리적 인터페이스에 여러 MAC 주소를 할당할 수 있는 promisuous mode를 지원해야합니다.

macvlan 네트워크 만들기

  • 브리지 모드: 트래픽은 호스트의 물리적 장치를 통과합니다.
  • 802.1q 트렁크 브리지 모드: 트래픽은 Docker가 즉시 생성하는 802.1q 하위 인터페이스를 통과합니다. 이를 통해 보다 세분화된 수준에서 라우팅 및 필터링을 제어할 수 있습니다.

브리지 모드

  • 주어진 물리적 네트워크 인터페이스와 연결되는 네트워크를 생성하려면 docker network create --driver macvlan 명령을 사용합니다.
  • 또한 트래픽이 Docker 호스트에서 실제로 통과할 인터페이스인 parent를 지정해야 합니다.
  • 주어진 IP 주소가 이미 사용 중인 경우와 같이 네트워크에 사용되는 IP 주소를 제외하려면 --aux-addrss 플래그를 사용합니다.
$ docker network create -d macvlan \
--subnet=172.16.86.0/24 \
--gateway=172.16.86.1 \
-o parent=eth0 pub_net

$ docker network create -d macvlan \
--subnet=192.168.32.0/24 \
--ip-range=192.168.32.128/25 \
--gateway=192.168.32.254 \
--aux-address="my-router=192.168.32.129" \
-o parent=eth0 macnet32

802.1q 트렁크 브리지 모드

eth.50과 같이 점이 포함된 인터페이스 이름을 지정하면 Docker는 이를 하위 인터페이스로 해석하고 자동으로 eth0 하위 인터페이스를 생성합니다.

$ docker network create -d macvlan \
--subnet=192.168.50.0/24 \
--gateway=192.168.50.1 \
-o parent=eth0.50 macvlan50

none

  • 컨테이너에서 네트워크를 완전히 비활성화하려면 컨테이너를 시작할 때 --network none 플래그를 사용할 수 있습니다.
  • 이렇게 되면 컨테이너 내에서 루프백 장치만 생성됩니다.
  • 다음은 그 예를 보여줍니다.
# TODO 1. 컨테이너를 만듭니다.
$ docker run --rm -dit \ 
--network none \
--name no-net-alpine \
alpine:latest \
ash

# TODO 2. 컨테이너 내에서 몇 가지 네트워킹 명령을 실행하여 네트워크 인터페이스를 확인합니다.
$ docker exec no-net-alpine ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

$ docker exec no-net-alpine ip route

# TODO 3. 컨테이너를 중지합니다. --rm 플래그를 사용하여 생성했기 때문에 자동으로 제거됩니다.
$ docker stop no-net-alpine

Note:

ash: A Shell - 유닉스 쉘

📌출처

Docker Docs


👍 개인 공부 기록용 블로그입니다. 오류나 조언이 있으시면 언제든지 댓글 혹은 메일로 남겨주시면 감사하겠습니다! 😄

맨 위로 이동하기

docker 카테고리 내 다른 글 보러가기

댓글남기기