Docker Network
2025. 12. 31. 14:07ㆍDocker
📦 도커 네트워크란 무엇인가?
도커 네트워크는
- 컨테이너 간 통신
- 컨테이너 ↔ 호스트
- 컨테이너 ↔ 외부 네트워크
위 통신을 리눅스 커널 네트워크 기능을 기반으로 가상화한 계층입니다.
핵심 키워드:
- Network Namespace
- veth pair
- Linux Bridge
- iptables / NAT
- Overlay (VXLAN)
🧠 도커 네트워크의 근본 원리 (리눅스 관점)
도커는 새로운 네트워크 기술을 만든 게 아닙니다.
👉 리눅스 커널이 이미 제공하던 기능을 조합했을 뿐입니다.
핵심 구성 요소
| 구성 요소 | 설명 |
|---|---|
| Network Namespace | 컨테이너마다 독립된 네트워크 스택 |
| veth pair | 가상 랜선 (컨테이너 ↔ 호스트 연결) |
| Linux Bridge | 가상 스위치 |
| iptables | NAT, 포트 포워딩 |
| routing table | 패킷 전달 경로 결정 |
🧩 컨테이너 하나가 생성될 때 벌어지는 일
- Network Namespace 생성
- 컨테이너마다 독립된:
- IP
- 라우팅 테이블
- ARP 캐시
- 포트 공간
- 컨테이너마다 독립된:
- veth pair 생성
- 하나의 가상 케이블
- 한쪽은 컨테이너 내부(
eth0) - 다른 한쪽은 호스트(
vethXXXX)
- 브리지에 연결
- 호스트 쪽 veth가
docker0브리지에 붙음
- 호스트 쪽 veth가
- IP 할당
- Docker 내부 DHCP가 IP 할당
- iptables NAT 설정
- 외부 통신 가능하게 SNAT/MASQUERADE 적용
🧱 기본 네트워크 드라이버 종류
1️⃣ bridge (디폴트값)



구조
[컨테이너] -- veth -- docker0 -- 호스트 NIC -- 외부
특징
- 컨테이너는 사설 IP 사용 (172.17.0.0/16)
- docker0 = Linux Bridge
- iptables NAT 필수
장점
- 가장 단순
- 로컬 개발에 적합
단점
- 멀티 호스트 불가
- 성능은 NAT 의존
2️⃣ host


구조
컨테이너 == 호스트 네트워크 스택 공유
특징
- Network Namespace 공유 ❌ (없음)
- 포트 충돌 가능
장점
- 최고 성능
- NAT 없음
단점
- 격리 거의 없음
- 보안 취약
📌 고성능 네트워크 서버, 프록시 테스트 용도
3️⃣ none
컨테이너: lo(127.0.0.1)만 존재
- 완전 격리
- 보안 실험, 커스텀 네트워크 구성용
4️⃣ overlay (멀티 호스트)


구조 핵심: 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 |