Docker 네트워크 가이드

Docker 네트워크 가이드

Docker 네트워크를 이해하고 직접 설정하는 방법을 다룹니다.

1. Docker 네트워크 종류

네트워크 확인

docker network ls

위 명령어를 실행하면 다음과 같은 기본 네트워크가 제공됩니다.

  • bridge: 컨테이너를 독립적인 가상 네트워크에서 실행. 기본 네트워크.
  • host: 컨테이너가 호스트 네트워크와 동일한 네트워크에서 실행됨.
  • none: 네트워크 연결이 없는 상태.

각 네트워크 상세 정보 확인

docker network inspect [네트워크이름]

2. Docker 네트워크 관련 명령어

  • docker network ls - 네트워크 리스트 출력
  • docker network inspect [네트워크명] - 네트워크 상세 정보 확인
  • docker network create [네트워크명] - 새로운 네트워크 생성
  • docker network rm [네트워크명] - 네트워크 삭제
  • docker network connect [네트워크명] [컨테이너명] - 컨테이너를 네트워크에 연결
  • docker network disconnect [네트워크명] [컨테이너명] - 컨테이너를 네트워크에서 해제

3. Docker의 bridge 네트워크 구조

컨테이너는 기본적으로 bridge 네트워크를 사용하며, 내부적으로 Linux Namespace를 활용합니다.

기본적으로 172.17.0.0/16 대역의 IP를 할당받으며, 네트워크 장치는 다음과 같이 구성됩니다.

[ 컨테이너 ]           [ 컨테이너 ]
[ lo ][eth0]           [ lo ][eth0]
     |                       |
   [veth]                  [veth]
       |                   /
        [docker0] (브릿지 네트워크)
             |
   [실제 네트워크 장치]
        

4. 직접 가상 네트워크 설정

1) 네임스페이스를 이용한 네트워크 구성


# 네임스페이스 생성
ip netns add ns1
ip netns add ns2

# 가상 네트워크 링크 생성
ip link add veth-ns1 type veth peer name veth-ns2

# 각 네임스페이스에 링크 연결
ip link set veth-ns1 netns ns1
ip link set veth-ns2 netns ns2

# IP 할당 및 활성화
ip netns exec ns1 ip address add 10.0.0.11/24 dev veth-ns1
ip netns exec ns2 ip address add 10.0.0.12/24 dev veth-ns2
ip netns exec ns1 ip link set veth-ns1 up
ip netns exec ns2 ip link set veth-ns2 up

# 연결 확인
ip netns exec ns1 ping 10.0.0.12
        

2) 가상의 브릿지를 이용한 네트워크 구성


# 가상의 브릿지 생성
ip link add bridge1 type bridge
ip link add bridge2 type bridge

# 네트워크 링크 생성 및 연결
ip link add ns1-veth type veth peer name ns1-veth-br
ip link add ns2-veth type veth peer name ns2-veth-br
ip link set ns1-veth netns ns1
ip link set ns2-veth netns ns2
ip link set ns1-veth-br master bridge1
ip link set ns2-veth-br master bridge2

# IP 설정 및 활성화
ip netns exec ns1 ip addr add 10.10.10.10/24 dev ns1-veth
ip netns exec ns2 ip addr add 20.20.20.20/24 dev ns2-veth
ip addr add 10.10.10.1/24 dev bridge1
ip addr add 20.20.20.1/24 dev bridge2

# 경로 추가 및 NAT 설정
ip netns exec ns1 ip route add default via 10.10.10.1
ip netns exec ns2 ip route add default via 20.20.20.1
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 20.20.20.0/24 -j MASQUERADE
        

5. Docker 네트워크 상태 확인

  • ip addr - 네트워크 인터페이스 확인 (docker0 확인 가능)
  • ip -c -br link - 네트워크 장치 상태 확인
  • docker exec [컨테이너명] ip a - 컨테이너 내부 네트워크 확인
  • docker exec [컨테이너명] route - 컨테이너의 기본 게이트웨이 확인
  • iptables -t nat -L - NAT 설정 확인