Docker 시리즈 (4)

1 분 소요

도커 네트워크

  • 도커는 자체적으로 컨테이너 내부IP를 순차적으로 할당한다. 이 내부IP는 도커가 설치된 호스트, 즉 내부 망에서만 쓸 수 있는 IP이므로 외부와 연결되어야한다. 각 컨테이너의 eth0는 도커엔진에 의해 자동으로 만들어지는 veth와 연결되고, 각각의 veth와 호스트의 eth0을 연결해주는게 브리지네 트워크 드라이버이다.
  • 컨테이너마다의 eth0 -> 컨테이너마다의 veth -> docker0 브리지 네트워크 드라이버로 바인딩 -> 호스트의 eth0 순서이다.
  • 도커가 자체적으로 제공하는 네트워크 드라이버엔 브리지, 호스트, 논, 컨테이너 이렇게 4가지가 있다.
  • 컨테이너를 생성하면 기본적으로 docker0이라는 브리지 네트워크 드라이버를 통해 외부와 통신할 수 있다.

브리지 네트워크

  • 기본적으로 컨테이너를 생성할 때 아무 옵션을 주지않으면 docker0 브리지 네트워크 드라이버를 쓴다. 이 때, 도커는 컨테이너에 172.17.0.x의 IP를 순차적으로 할당한다.
  • 사용자가 직접 브리지 네트워크를 생성하고 해당 브리지를 컨테이너 생성할 때 네트워크 드라이버로 설정할 수 있다.
# docker network create --driver bridge myBridge
# docker run -i -t --name myNetwork_container --net myBridge ubuntun:14.04
  • 컨테이너 내부로 들어가서 ifconfig로 확인하면 IP가 172.17.0.x가 아닌 172.18.0.x 대역으로 할당된 것을 알 수 있다.
  • 브리지 네트워크와 오버레이 네트워크와 같이 특정 IP대역을 갖는 네트워크는 컨테이너에 유동적으로 붙이고 뗄 수도 있다.
# docker network disconnect myBridge myNetwork_container
# docker network connect myBridge myNetwork_container

  • –net-alias 옵션으로 이름을 하나 넣으면 해당하는 컨테이너에 접근할 수 있다.
# docker run -i -t -d --name myNetwork_alias_container1 --net myBridge --net-alias laboratory ubuntun:14.04
# docker run -i -t -d --name myNetwork_alias_container2 --net myBridge --net-alias laboratory ubuntun:14.04
# docker run -i -t -d --name myNetwork_alias_container3 --net myBridge --net-alias laboratory ubuntun:14.04
# docker run -i -t --name network_alias_ping --net myBridge ubuntun:14.04
# ping -c 1 laboratory  // 위 3개의 컨테이너가 번갈아가면서 응답함

호스트 네트워크

  • 호스트의 네트워크 환경을 그대로 쓸 수 있다. 따라서 컨테이너 내부의 어플리케이션을 별도의 포트 포워딩 없이 바로 서비스할 수 있다.
  • 이는 마치 실제 호스트에서 어플리케이션을 외부에 노출하는 것과 같다.
# docker run -i -t --name network_host --net host ubuntu:14.04

논 네트워크

  • 말 그대로 아무런 네트워크를 쓰지 않아서 외부와 단절된다.
  • 논 네트워크로 설정한 네트워크 내부에서 ifconfig로 네트워크 인터페이스를 확인하면 로컬호스트를 나타내는 lo 외에는 존재하지 않는 것을 확인할 수 있다.
# docker run -i -t --name network_none --net none ubuntu:14.04

컨테이너 네트워크

  • –net 옵션으로 컨테이너를 입력하면 다른 컨테이너의 네트워크 네임스페이스 환경을 공유할 수 있다.
  • 공유되는 속성은 내부IP, 네트워크 인터페이스의 맥주소 등이 있다.
  • 내부IP를 새롭게 할당받지 않으며 veth도 새롭게 받지않고 공유되는 컨테이너의 네트워크 인터페이스 전부를 공유한다.
# docker run -i -t -d --name network_container_1 ubuntu:14.04
# docker run -i -t -d --name network_container_2 --net container:network_container_1 ubuntu:14.04

카테고리:

업데이트:

댓글남기기