본문 바로가기
DevOps/Docker

Docker Container Networking 간단 정리

by 돈코츠라멘 2019. 10. 15.
$ docker network ls
NETWORK ID          NAME                  DRIVER              SCOPE
9802b1bb6468        bridge                bridge              local
f78513044503        docker_dask_default   bridge              local
8eeeb223ac9f        docker_gwbridge       bridge              local
u6u3pgytc9qr        hadoop-net            overlay             swarm
94e45591dbd0        host                  host                local
cuz7djbr1y1z        ingress               overlay             swarm
a214353d85c3        none                  null                local
  • docker network inspect 명령으로 네트워크 설정 및 연결된 노드들의 정보를 확인 가능
$ docker network inspect

Network Driver 종류

Container

bridge - default

  • 컨테이너가 외부와 통신하기 위한 Virtual Bridge
  • 컨테이너가 하나씩 실행될 때 마다 Bridge에 컨테이너 인터페이스가 바인딩 됨
  • 가장 기본적인 Bridge는 docker0: host에서 ifconfig 명령으로도 확인 가능 - docker0 의 IP는 자동으로 172.17.0.1로 설정되며, Subnet Mask는 255.255.0.0 즉, 172.17.0.0/16 으로 설정

host

  • --net=host 옵션
  • 컨테이너가 독립적인 네트워크 영역을 갖지 않고 호스트와 네트워크를 공유함(Bridge는 각 컨테이너가 독립적인 네임스페이스를 가짐)

container

  • 기존에 존재하는 다른 컨테이너의 네트워크 환경을 공유
  • --net=container:[containerID] 옵션
  • 기존에 존재하던 컨테이너와 같은 ip 주소, mac 주소를 가지게 됨(이 컨테이너를 위한 인터페이스는 없음!)

none

  • --net=none 옵션
  • 외부와의 인터페이스가 없음

Orchestration

ex) Swarm

overlay

  • 필요성: 포트 포워딩을 통해 다른 호스트와 통신은 가능하겠지만, 어떤 애플리케이션에서는 포트가 랜덤하게 지정되는 경우가 많음 - 이 경우 포드 포워딩으로 통신하게 하는 것은 사실상 불가능
  • 여러 대의 노드를 하나의 네트워크로 묶어서(= 같은 NAT을 공유하게 만들어서) 이 네트워크를 사용하는 모든 컨테이너들이 문제없이 통신할 수 있게 함
  • 마스터 노드에서 docker network create --driver overlay --subnet=10.0.9.0/24 my-net 명령으로 생성하고 컨테이너를 시작할 때 --net=my-net 옵션으로 overlay network 사용
$ docker network create --driver overlay --subnet=10.0.9.0/24 my-net
  • swarm을 사용하는 경우 도커의 내장 overlay network인 docker_gwbridge로 각 host들이 자동으로 연결됨

댓글