디폴트 브릿지 vs 사용자 정의 브릿지

2025. 12. 31. 15:08Docker

🧱 디폴트 브릿지 vs 사용자 정의 브릿지

ImageImageImage

 

1️⃣ 디폴트 브릿지 (default bridge)

✔️ 정체

  • Docker 설치 시 자동으로 생성
  • 이름: bridge
  • 실제 Linux Bridge 이름: docker0
  • 대역: 172.17.0.0/16
docker network ls
NETWORK ID   NAME     DRIVER   SCOPE
xxxx         bridge   bridge   local

 

🔧 동작 방식

docker run nginx
docker run redis
  • 아무 네트워크 지정 ❌
  • 👉 자동으로 default bridge에 연결

구조:

nginx ─┐
       ├─ docker0 (bridge)
redis ─┘

 

❌ 치명적인 한계

① 컨테이너 이름 기반 DNS ❌

ping redis

➡️ 안 됩니다

왜냐하면:

  • default bridge에는 Docker DNS가 붙지 않음
  • IP로만 통신 가능
ping 172.17.0.3  # 가능

 

② 수동 연결만 가능

docker network connect bridge my-container
  • 자동 서비스 디스커버리 ❌
  • 관리 매우 불편

③ 네트워크 격리 불가

  • 모든 컨테이너가 한 브리지에 섞임
  • 보안/계층 분리 불가능

📌 결론 (디폴트 브릿지)

“있지만 쓰라고 만든 게 아니다”

  • 학습용
  • 임시 테스트
  • 실무·Compose·MSA ❌

2️⃣ 사용자 정의 브릿지 (User-defined Bridge)

✔️ 정체

  • 사용자가 직접 생성
  • Docker가 강력한 기능을 활성화
docker network create backend

 

🔧 동작 방식

docker run --network backend --name api nginx
docker run --network backend --name db mysql

 

구조:

api ─┐
     ├─ backend (user bridge + Docker DNS)
db ──┘

 

⭐ 사용자 정의 브릿지의 핵심 장점

① 컨테이너 이름 기반 DNS ⭕ (가장 중요)

ping db

✔️ 즉시 동작

이유:

  • Docker 내장 DNS 서버 (127.0.0.11)
  • 컨테이너 이름 → IP 자동 매핑
cat /etc/resolv.conf
nameserver 127.0.0.11

 

② 자동 네트워크 연결

  • Compose 사용 시 자동 연결
  • 서비스 이름 = DNS 이름
services:
  api:
    networks: [backend]
  db:
    networks: [backend]

➡️ jdbc:mysql://db:3306/app

 

③ 네트워크 격리 가능 (보안 핵심)

networks:
  frontend:
  backend:
[Client] → frontend → api → backend → db
  • db는 frontend 접근 ❌
  • api만 접근 ⭕

➡️ 네트워크 레벨 보안

 

④ IP 대역 직접 지정 가능

docker network create \
  --subnet 172.30.0.0/16 \
  mynet
  • 충돌 방지
  • VPN / 사내망 연동 유리

⑤ 컨테이너 재시작 시 IP 변경에도 안전

  • IP 하드코딩 ❌
  • 이름 기반 통신 ⭕
  • MSA 필수 조건

 

🔍 기능 비교 표 (한 눈에)

항목 디폴트 브릿지 사용자 정의 브릿지
자동 생성
컨테이너 이름 DNS
Docker DNS
네트워크 격리
Compose 친화성
실무 사용
보안 설계

 

⚠️ 실무에서 실제로 터지는 사고 예

❌ default bridge 사용

jdbc:mysql://localhost:3306/db
  • 컨테이너 분리 → 연결 실패
  • IP 변경 → 서비스 장애

✅ user-defined bridge 사용

jdbc:mysql://db:3306/db
  • 컨테이너 재시작 OK
  • 확장 OK
  • 배포 OK

🎯 핵심 문장

디폴트 브릿지는 단순한 L2 브리지일 뿐이며,
사용자 정의 브릿지는 Docker DNS와 서비스 디스커버리를 포함한
“컨테이너 통신 플랫폼”이다.

 

🔥 한 줄 요약

❌ default bridge는 “자동이라 쓰는 것”
⭕ user-defined bridge는 “설계해서 쓰는 것”

'Docker' 카테고리의 다른 글

DockerFile  (0) 2025.12.31
Docker Compose 네트워크  (0) 2025.12.31
Docker Network  (0) 2025.12.31
Union File System & Overlay File System  (0) 2025.12.31
Spring Boot 앱의 JAR 파일 구조  (0) 2025.12.30