Docker Networking

Yu Sang Min·2025년 6월 26일

CKA

목록 보기
74/110

🚢 Docker Networking 완벽 이해


🏗️ Docker Networking 종류

옵션특징
none네트워크 없음. 외부, 다른 컨테이너와 통신 불가
host컨테이너가 호스트와 네트워크를 공유. 포트 충돌 발생 가능
bridge (기본)Docker가 기본으로 제공하는 내부 가상 네트워크. 컨테이너 간 통신 가능

🔥 Bridge Network 상세 구조

구조도

[Host eth0] (192.168.1.10)
       │
  [docker0 Bridge] (172.17.0.1)
   ┌───────────────┬───────────────┐
 [Container1]   [Container2]    ...
(172.17.0.2)   (172.17.0.3)

작동 방식

  1. Docker 설치 시 자동으로 bridge network (docker0) 생성

  2. 브릿지 네트워크 IP: 172.17.0.1/16

  3. 컨테이너 생성 시:

    • network namespace 생성

    • veth pair 생성

      • 한쪽은 컨테이너에 연결
      • 다른쪽은 docker0 브릿지에 연결
  4. 컨테이너는 브릿지 내에서 서로 통신 가능


🔗 Docker가 네임스페이스와 연결하는 방식

  • 컨테이너 = 하나의 network namespace
  • 각 컨테이너 생성 시:
ip link add vethXXXX type veth peer name vethYYYY
ip link set vethXXXX netns container
ip link set vethYYYY master docker0
ip link set vethYYYY up
  • IP 자동 할당 (예: 172.17.0.2)

🌐 포트 포워딩 (Port Mapping)

  • 컨테이너는 기본적으로 내부 브릿지 네트워크에서만 접근 가능
  • 외부 접근 시 포트 매핑 사용

✅ 예시

docker run -d -p 8080:80 nginx

http://<Docker Host IP>:8080 으로 접근 가능

  • 호스트의 8080 포트 → 컨테이너의 80 포트로 전달

✅ 내부 동작

  • Docker가 자동으로 iptables NAT 룰 생성
iptables -t nat -A DOCKER -p tcp --dport 8080 -j DNAT --to-destination 172.17.0.2:80

PREROUTING 체인에서 포트 리다이렉션


🚫 host network 주의사항

  • 컨테이너가 호스트 네트워크 스택 공유
  • 포트 충돌 발생 가능
  • 퍼포먼스는 좋지만 네임스페이스 격리 불가

🧠 iptables와 Docker의 관계

  • Docker는 네트워크 격리 및 포트 포워딩을 위해 iptables NAT 테이블 사용
  • DOCKER 체인을 만들어 동적 관리

🔥 정리

구성 요소역할
docker0브릿지 네트워크 (172.17.0.1)
veth pair호스트 ↔ 컨테이너 연결
iptables외부 ↔ 컨테이너 포트 포워딩 및 NAT 적용
network ns컨테이너마다 독립된 네트워크 네임스페이스

🚀 도커 네트워킹을 Kubernetes와 연결하기

  • Docker의 네임스페이스 + 브릿지 구조는 Kubernetes에서 CNI (Container Network Interface) 로 확장
  • 다음 강의는 바로 이 CNI를 다룰 예정
profile
React, Node.js, AWS, Git, Github, Github Action, Docker, K8S

0개의 댓글