Docker
[도커 알아가기] 3. 도커 네트워크
begong
2025. 1. 16. 03:04
반응형
관련 글 목록
지난 글에서 도커의 실행 방식을 알아보았으니, 이제 도커 네트워크는 어떻게 구성되어있는지 알아보겠습니다.
Docker 네트워크의 종류
- 도커 네트워크의 종류는 6개가 있다고 한다. (공식문서 : https://docs.docker.com/engine/network/ )
- Bridge Network
- 기본적인 네트워크 드라이버
- Docker Daemon이 관리하는 가상의 브리지 네트워크를 사용
- 컨테이너는 이 네트워크 내에서 IP 주소를 할당받고, 다른 컨테이너와 통신
- 애플리케이션이 동일한 호스트의 다른 컨테이너와 통신해야 하는 컨테이너에서 실행될 때 일반적으로 사용
- Host Network
- 호스트 시스템의 네트워크를 직접 사용 (컨테이너와 Docker 호스트 간의 네트워크 격리를 제거)
- Overlay Network
- 여러 Docker 데몬을 서로 연결하여 구성
- Macvlan Network
- 컨테이너에 MAC주소를 할당
- ipvlan Network
- 사용자에게 IPv4와 IPv6 주소 지정에 대한 완전한 제어권을 제공
- None Network
- 컨테이너를 호스트 및 다른 컨테이너로부터 완전히 분리
현재 프로젝트에서는 Bridge Network를 사용중입니다.
문제를 찾기위해 Bridge Network에 대해서 알아보았습니다.
Bridge Network의 구조
- eth0
- 호스트의 eth0
- 호스트가 외부와 연결할 때 사용하는 IP가 할당된 호스트 네트워크 인터페이스
- 호스트 시스템의 네트워크 카드
- 호스트의 eth0
- docker0
- 도커가 설치될 때 기본적으로 구성되는 브릿지
- veth와 호스트의 eth0 인터페이스를 이어주는 중간다리
- 내부 컨테이너 간 통신, 외부 통신 시 NAT역할 수행
- veth (virtual eth)
- 컨테이너 내부의 IP를 외부와 연결해 주는 역할을 하는 가상 인터페이스
- 컨테이너가 생성될 때 동시에 생성, conatiner의 eth0인터페이스와 연결되어있음.
- veth와 호스트의 eth0를 연결시켜야 외부와 통신 가능
Docker 네트워크 설정은 누가 담당하는가?
- Docker Daemon이 컨테이너를 실행할 때 네트워크 설정을 담당
- 컨테이너 생성 시 docker-proxy 프로세스를 시작함과 동시에, 호스트에 iptables 규칙을 추가
그렇다면 Bridge모드의 포트포워딩은 어떻게 일어나는가?
도커는 리눅스 커널의 iptables
를 활용하여 포트포워딩을 합니다
docker Daemon이 컨테이너 실행 시 NAT 규칙을 iptables에 등록 합니다.
더불어 docker-proxy
프로세스가 생성됩니다
외부에서 들어온 요청은 iptables 규칙에 따라 docker-proxy를 통해 컨테이너로 이동됩니다.
NAT변환은 docker0 브릿지가 담당합니다.
참고
userland proxy
- 네트워크 스택을 사용하지 않고 사용자 공간에서 실행되는 프록시
- userland : 사용자 공간, 커널 공간 외부의 영역
- 일반적으로 네트워크 작업은 커널 공간에서 처리됨
- 예) 소프트웨어 방화벽 vpn 등
- userland : 사용자 공간, 커널 공간 외부의 영역
- 도커에서 userland proxy
- 호스트의 포트와 컨테이너의 포트를 연결해주는 프록시 서버
- 커널공간의 네트워크 스택을 사용하지 않고 사용자공간에서 트래픽을 중계
- 컨테이너의 포트를 호스트에 바인딩할 때(-p 또는 --publish 옵션 사용 시) 각 포트 매핑마다
docker-proxy
프로세스를 생성
참고문서
Docker Network : 호스트와 컨테이너를 위한 네트워크를 구성해보자
Docker 공부 2 - 엔진과 네트워크 - DevLog
166. [Docker] Docker 네트워크 구조 : userland proxy, iptables 및 hairpining
반응형