728x90
[Docker] 도커 네트워크
도커 컨테이너 및 서비스는 도커 네트워크를 통해 격리된 컨테이너 간의 네트워크 연결뿐만 아니라
도커 외의 다른 애플리케이션 워크로드와도 연결이 가능하다.
이때 도커 네트워크의 하위 시스템 연결을 위해 도커 네트워크 드라이버를 사용하면 상호 간 통신이 가능하다.
1. 도커 네트워크 인터페이스
위 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을 지정하여 생성 |
반응형
'🐳 Container > Docker' 카테고리의 다른 글
[Docker] Docker 이미지 빌드를 위한 Makefile 활용 방법 (0) | 2024.02.14 |
---|---|
[Docker] ubuntu 22.04 docker 설치 (0) | 2023.10.06 |
[Docker] 컨테이너 리소스 (0) | 2023.08.09 |
[Docker] 도커 스토리지 볼륨 마운트 (0) | 2023.05.22 |
[Docker] 도커 이미지 빌드 (Docker Image Build) (0) | 2023.04.15 |