Docker Network

2025. 12. 31. 14:07Docker

📦 도커 네트워크란 무엇인가?

도커 네트워크

  • 컨테이너 간 통신
  • 컨테이너 ↔ 호스트
  • 컨테이너 ↔ 외부 네트워크

위 통신을 리눅스 커널 네트워크 기능을 기반으로 가상화한 계층입니다.

 

핵심 키워드:

  • Network Namespace
  • veth pair
  • Linux Bridge
  • iptables / NAT
  • Overlay (VXLAN)

🧠 도커 네트워크의 근본 원리 (리눅스 관점)

도커는 새로운 네트워크 기술을 만든 게 아닙니다.
👉 리눅스 커널이 이미 제공하던 기능을 조합했을 뿐입니다.

 

핵심 구성 요소

구성 요소 설명
Network Namespace 컨테이너마다 독립된 네트워크 스택
veth pair 가상 랜선 (컨테이너 ↔ 호스트 연결)
Linux Bridge 가상 스위치
iptables NAT, 포트 포워딩
routing table 패킷 전달 경로 결정

 

🧩 컨테이너 하나가 생성될 때 벌어지는 일

  1. Network Namespace 생성
    • 컨테이너마다 독립된:
      • IP
      • 라우팅 테이블
      • ARP 캐시
      • 포트 공간
  2. veth pair 생성
    • 하나의 가상 케이블
    • 한쪽은 컨테이너 내부(eth0)
    • 다른 한쪽은 호스트(vethXXXX)
  3. 브리지에 연결
    • 호스트 쪽 veth가 docker0 브리지에 붙음
  4. IP 할당
    • Docker 내부 DHCP가 IP 할당
  5. iptables NAT 설정
    • 외부 통신 가능하게 SNAT/MASQUERADE 적용

 

🧱 기본 네트워크 드라이버 종류

1️⃣ bridge (디폴트값)

ImageImageImage

구조

[컨테이너] -- veth -- docker0 -- 호스트 NIC -- 외부

특징

  • 컨테이너는 사설 IP 사용 (172.17.0.0/16)
  • docker0 = Linux Bridge
  • iptables NAT 필수

장점

  • 가장 단순
  • 로컬 개발에 적합

단점

  • 멀티 호스트 불가
  • 성능은 NAT 의존

2️⃣ host

ImageImage

구조

컨테이너 == 호스트 네트워크 스택 공유

특징

  • Network Namespace 공유 ❌ (없음)
  • 포트 충돌 가능

장점

  • 최고 성능
  • NAT 없음

단점

  • 격리 거의 없음
  • 보안 취약

📌 고성능 네트워크 서버, 프록시 테스트 용도

 

3️⃣ none

컨테이너: lo(127.0.0.1)만 존재
  • 완전 격리
  • 보안 실험, 커스텀 네트워크 구성용

4️⃣ overlay (멀티 호스트)

ImageImageImage

구조 핵심: VXLAN

컨테이너 패킷
 ↓
VXLAN 캡슐화 (UDP 4789)
 ↓
물리 네트워크
 ↓
다른 호스트의 컨테이너

특징

  • 여러 호스트 간 컨테이너 통신
  • Docker Swarm / Kubernetes 필수
  • 내부적으로 VXLAN 터널 사용

장점

  • MSA 환경 필수
  • 서비스 디스커버리 가능

단점

  • 성능 오버헤드
  • 디버깅 난이도 높음

🔌 포트 포워딩의 정체 (매우 중요)

docker run -p 8080:80 nginx

실제로 일어나는 일

iptables -t nat -A PREROUTING -p tcp --dport 8080 \
  -j DNAT --to-destination 172.17.0.2:80

즉,

  • 도커가 포트를 “열어주는 것” ❌
  • iptables가 패킷을 변환 ✔️

🌐 사용자 정의 bridge 네트워크 (실무 핵심)

docker network create mynet

왜 중요할까요?

기본 bridge 사용자 정의 bridge
컨테이너 이름 DNS ❌ 컨테이너 이름 DNS ⭕
수동 연결 자동 연결
권장 ❌ 권장 ⭕
services:
  api:
    networks: [backend]
  db:
    networks: [backend]

➡️ db:3306 으로 바로 접근 가능
➡️ IP 하드코딩 완전 제거

 

🧠 Docker Compose 네트워크 동작 원리

networks:
  backend:
    driver: bridge
  • Compose 프로젝트당 독립 브리지 자동 생성
  • 서비스 이름 = DNS 이름
  • 동일 네트워크 = 통신 가능

 

🔐 네트워크 격리 전략 (실무 설계)

networks:
  frontend:
  backend:
[Client] → frontend → api → backend → db
  • DB는 frontend 접근 ❌
  • API만 DB 접근 ⭕
  • 네트워크 레벨 보안

 

⚠️ 흔한 오해 정리

오해 실제
컨테이너는 VM이다 ❌ Namespace 격리
포트는 컨테이너에 열림 ❌ iptables
docker0는 도커 전용 기술 ❌ Linux Bridge
overlay는 느리다 ⚠️ VXLAN 오버헤드

 

🎯 정리 한 문장

도커 네트워크는 리눅스 커널의 네트워크 네임스페이스, 브리지, veth, iptables를 조합한 정교한 가상 네트워크 시스템이다.

'Docker' 카테고리의 다른 글

Docker Compose 네트워크  (0) 2025.12.31
디폴트 브릿지 vs 사용자 정의 브릿지  (0) 2025.12.31
Union File System & Overlay File System  (0) 2025.12.31
Spring Boot 앱의 JAR 파일 구조  (0) 2025.12.30
overlay2  (1) 2025.12.30