🐳 Container/Docker

[Docker] 도커 네트워크

heywantodo 2023. 8. 17. 15:18
728x90
반응형

[Docker] 도커 네트워크

도커 컨테이너 및 서비스는 도커 네트워크를 통해 격리된 컨테이너 간의 네트워크 연결뿐만 아니라

도커 외의 다른 애플리케이션 워크로드와도 연결이 가능하다.

 

이때 도커 네트워크의 하위 시스템 연결을 위해 도커 네트워크 드라이버를 사용하면 상호 간 통신이 가능하다.

 

1. 도커 네트워크 인터페이스

 

Networking overview

 

docs.docker.com

위 docs의 네트워크 정의는 다음과 같다. 

도커 설치 시 기본적으로 제공되는 docker0은 소프트웨어적으로 구현된 가상 이더넷 브릿지 네트워크고,
이것을 통해 격리된 컨테이너들의 상호 간 통신을 제공한다. 

별도의 브릿지 네트워크를 생성하여 연결값으로 설정하지 않는 한 실행되는 모든 컨테이너는

docker0 브릿지에 연결되어 172.17.0.0/16 CIDR 범위로 IP 주소가 할당된다. 

여기에서 제공되는 네 가지 네트워크 인터페이스는 다음과 같다.

enp0s8 Ubuntu 리눅스의 네트워크 카드
docker0 도커 설치지 시본적으로 제공되는 브릿지 네트워크
docker0 브릿지는 소프트웨어적인 스위치 방식으로 동작
일반적인 스위치 방식과는 다르게 DHCP로 연결된 컨테이너에 사전에 정의된 IP풀 할당
vethxxxxxx OSI 7계층 서비스 모델의 2계층 서비스
eth0와 한 쌍으로 제공되어 docker0과 가상의 터널링 네트워크를 제공
eth0 도커 컨테이너에 생성되는 기본 네트워크 인터페이스
docker0을 게이트웨이로 사용
순차적으로 IP 주소를 할당받거나, 사용자가 동일 대역의 IP 주소를 지정 가능

실제 컨테이너에서는 다음과 같이 확인해 볼 수 있다.

  • docker0의 IP주소 확인
ifconfig docker0

  • 현재 설정되어 있는 도커 네트워크 드라이버 방식 조회
docker network ls

  • 컨테이너 생성 후 네트워크 도구 확인

ubuntu:14.04 이미지에는 리눅스에서 사용하는 네트워크 도구가 설치되어 있다.

docker run -it -d --name container1 ubuntu:14.04

#IP
docker inspect container1 | grep IPAddress
docker inspect -f "{{ .NetworkSettings.IPAddress }}" container1
docker exec container1 ifconfig

#MAC주소
docker inspect container1 | grep MAC

#Route
docker exec container1 route

컨테이너를 하나 더 생성 후 ifconfig으로 확인하면

컨테이너의 수만큼 veth(가상네트워크 인터페이스)가 자동 추가된 모습을 확인 할 수 있다.

docker run -it -d --name container2 ubuntu:14.04
ifconfig

  • 브리지 네트워크 인터페이스 조회 도구 사용
sudo apt install bridge-utils
brctl show

 

2. 도커 네트워크 드라이버

도커에서 제공하는 도커 네이티브 드라이버는 다음 명령을 통해 확인할 수 있다.

docker info | grep Network

도커 네트워크 드라이버는 도커 엔진의 일부이며, 추가 구성 할 필요는 없다.

docker run 사용 시 --net 옵션을 이용해 선택할 수 있고, docker network 명령을 통해 호출하여 사용한다.

bridge 기본 네트워크 드라이버
실행 시 별도의 네트워크 지정 없이 독립적으로 실행되는 컨테이너를 실행하는 경우 사용
동일 호스트 상의 도커 컨테이너에만 적용됨
host 컨테이너와 호스트 간의 네트워크 격리를 제거하고 호스트의 네트워킹을 직접 사용
컨테이너 애플리케이션에 별도의 포트 연결 없이 호스트의 포트를 이용하여 바로 서비스 가능
overlay 다중 호스트 도커 서버를 이용한 클러스터(ex. 도커 스웜) 등을 이용할 경우 사용
컨테이너 간 운영체제 수준의 라우팅을 사용하지 않아도 됨
macvlan 물리적 네트워크에 컨테이너 mac 주소를 통한 직접 연결 구현 시 사용
도커 데몬은 mac 주소별로 트래픽을 라우팅하게 됨
none 컨테이너의 네트워크를 사용하지 않도록 설정
네트워크 인터페이스는 lo 인터페이스(loopback adaptor)만 존재
호스트 네트워킹 스택에서 완전히 분리되는 것으로, 컨테이너는 외부와의 통신 단절
container network container:공유받을 컨테이너 이름 
컨테이너의 네트워크 네임스페이스 스택을 공유하여 같이 사용할 수 있음
사용자 정의 네트워크 docker network create 명령을 통해 사용자가 직접 생성한 도커 네트워크
아무런 옵션을 주지않고 생성하면 docker0 IP 대역의 다른 CIDR을 지정하여 생성
728x90
반응형