본문 바로가기
서버/도커

[도커] 도커 네트워크

by Yikanghee 2022. 2. 25.
  • 도커 네트워크 구조
    • 도커는 컨테이너 내부 ip를 순차적으로 할당한다
    • 이 ip는 컨테이너를 재시작할 때마다 변경될 수 있다
    • 내부 ip는 도커가 설치된 호스트, 즉 내부 망에서만 쓸 수 있는 ip이므로 외부와 연결될 필요가 있다
    • 이 과정은 컨테이너를 시작할 때마다 호스트에 veth(vitual) 라는 네트워크 인터페이스를 생성하면서 이루어진다
    • veth 인터페이스는 사용자가 직접 생성할 필요는 없으며 컨테이너가 생성될 때 도커 엔진이 자동으로 생성함
    • 이말은 즉, 실행중인 컨테이너 수만큼 veth로 시작하는 인터페이스가 생성된다
    • 이때 docker() 브리지도 같이 생성되는데 브리지의 역할은 각 veth 인터페이스와 바인딩돼 호스트의 eth() 인터페이스와 이어주는 역할을 한다
  • 도커 네트워크 기능
    • 컨테이너를 생성하면 기본적으로 docker() 브리지를 통해 외부와 통신할 수 있는 환경을 사용할 수 있지만 사용자의 선택에 따라 여러가지 네트워크 드라이버를 쓸 수 있다
    • 대표적인 네트워크 드라이버로는 브리지, 호스트, 논, 컨테이너, 오버레이가 있다
    • 기본적으로 브리지 네트워크는 생성할때 자동으로 연결되는 docker() 브리지를 활용하도록 설계되어있음
    • 만약 기본적으로 존재하는 docker()를 사용하는 브릿지 네트워크가 아닌 새로운 브리지 타입의 네트워크를 생성하려면 다음과 같은 명령어를 입력한다
    docker network create --driver bridge mybridge
    
    브리지 생성만들어 놓은 브리지와 연결하여 컨테이너 생성docker network disconnect, connect를 사용해서 컨테이너에 유동적으로 붙이고 뗄 수 있음
  • docker network disconnect mybridge mynetwork_container docker network connect mybridge mynetwork_container
  • docker run -i -t --name mynetwork_container \\ --net mybridge \\ ubuntu:14.04
  • 호스트 네트워크
    • 네트워크를 호스트로 설정하면 호스트의 네트워크 환경을 그대로 쓸 수 있음
    • host 네트워크를 사용한 컨테이너를 설정하려면 다음과 같은 명령어를 사용함
    docker run -i -t --name network_host \\
    --net host \\
    ubuntu:14.04
    
    호스트 모드를 쓰는 컨테이너에서 아파치 웹 서버를 구동한다면 호스트의 ip와 컨테이너의 아파치 웹 서버 포트인 80으로 바로 접근할 수 있다
  • 논 네트워크
    • none은 말 그대로 아무 네트워크를 쓰지 않는 것을 뜻함. 논 네트워크 컨테이너를 생성하면 외부와 연결이 단절됨
    docker run -i -t --name network_none \\
    --net none \\
    ubuntu:14.04
    
  • 컨테이너 네트워크
    • 컨테이너 네트워크를 만들면 다른 컨테이너의 네트워크 네임스페이스 환경을 공유할 수 있음 (내부 IP, 네트워크 인터페이스의 주소)
    docker run -i -t -d --name network_container_1 ubuntu:14.04
    
    docker run -i -t -d --name network_container_2 \\
    --net containe:network_container_1 \\
    ubuntu:14.04
    
    이렇게 다른 컨테이너의 내부 네트워크 환경을 공유하면 내부 IP를 새로 할당받지 않으며 호스트에 veth로 시작하는 가상 네트워크 인터페이스도 생성되지 않음

이 글은 시작하세요! 도커/쿠버네티스를 보고 공부한 내용입니다

댓글