상세 컨텐츠

본문 제목

[Docker] 네트워킹: bridge vs host

Devops 도전기/Docker

by 끝까지해봐야지 2024. 5. 24. 13:44

본문

 

Docker 네트워킹: 컨테이너 네트워크 설정과 관리

Docker 네트워킹은 컨테이너를 다양한 네트워크에 연결할 수 있게 해줍니다. 이를 통해 컨테이너 간 통신을 설정하고, 컨테이너가 외부 네트워크와 상호작용할 수 있도록 합니다. Docker는 여러 네트워크 드라이버를 제공하여 다양한 네트워크 구성을 지원합니다.

네트워크 드라이버

Docker 네트워크 드라이버는 다양한 네트워크 구성을 구현하는 데 사용됩니다. 주요 네트워크 드라이버 유형은 다음과 같습니다:

브릿지 (Bridge)

브릿지 네트워크는 컨테이너의 기본 네트워크 드라이버입니다. 드라이버를 지정하지 않으면 이 유형의 네트워크가 생성됩니다. 브리지 네트워크는 애플리케이션이 독립 실행형 컨테이너에서 실행되고 서로 통신해야 할 때 사용됩니다. docker-proxy를 통해 호스트와 연결되며, 통신이 필요할 경우 포트를 맵핑해줘야 합니다.

 

장점

  • 격리성: 컨테이너 간의 네트워크 트래픽이 격리되어 보안이 강화됩니다.
  • 유연성: 다양한 네트워크 토폴로지를 구성할 수 있습니다.
  • 포트 매핑: 호스트와 컨테이너 간에 포트를 매핑하여 외부 접근을 설정할 수 있습니다.

단점

  • 성능 오버헤드: 네트워크 가상화로 인해 약간의 성능 저하가 있을 수 있습니다.
  • 복잡성: 네트워크 설정과 관리가 다소 복잡할 수 있습니다.

호스트 (Host)

호스트 네트워크는 독립 실행형 컨테이너의 경우, 컨테이너와 Docker 호스트 간의 네트워크 격리를 제거하고 호스트의 네트워킹을 직접 사용합니다. 이는 네트워크 성능이 중요한 경우에 유용합니다.

 

장점

  • 성능: 네트워크 가상화가 없기 때문에 성능 저하가 없습니다.
  • 단순성: 네트워크 설정이 단순하며, 별도의 포트 매핑이 필요 없습니다.

단점

  • 격리성 부족: 모든 컨테이너가 호스트의 네트워크를 공유하므로, 보안과 네트워크 트래픽 격리가 어렵습니다.
  • 포트 충돌: 여러 컨테이너가 동일한 포트를 사용하려고 할 때 충돌이 발생할 수 있습니다.

네트워크 상태 확인

Docker 명령어를 통해 현재 네트워크 상태를 확인할 수 있습니다:

$ docker network ls

호스트 네트워크 모드

호스트 네트워크 모드는 컨테이너가 호스트의 네트워크 스택을 공유하도록 설정합니다. 이를 통해 네트워크 격리가 제거되고, 컨테이너는 호스트와 동일한 IP 및 포트를 사용합니다.

실습: 호스트 모드 컨테이너 생성

  1. 호스트 모드의 컨테이너를 생성합니다:
    $ docker run -d -it --network host --name nginx-host nginx:latest

  2. 네트워크 설정을 확인합니다:
    $ docker inspect nginx-host | grep NetworkMode
  3. 웹 서버에 접근하여 확인합니다:
    $ curl localhost


  4. 실습을 마치고 컨테이너를 삭제합니다:
    $ docker stop nginx-host
    $ docker rm -f nginx-host

 

 

브릿지 네트워크 모드

브릿지 네트워크는 기본 네트워크 드라이버로, 컨테이너가 동일한 브릿지 네트워크 내에서 서로 통신할 수 있도록 합니다.

실습: 브릿지 모드 컨테이너 생성

  1. 브릿지 모드의 컨테이너를 두 개 생성합니다:
    $ docker run -d -it --name nginx01 nginx:latest 
    $ docker run -d -it --name nginx02 nginx:latest

  2. 브릿지 네트워크 내용을 확인합니다:
    $ docker network inspect bridge 


  3. 두 컨테이너 간 통신을 시도합니다:

nginx01 → nginx02:

$ docker exec -it nginx01 curl 172.17.0.3

nginx02 → nginx01:

$ docker exec -it nginx02 curl 172.17.0.2

 

위 실습을 통해 컨테이너가 브릿지 네트워크를 통해 서로 통신할 수 있음을 확인할 수 있습니다. 브릿지 네트워크는 일반적으로 여러 컨테이너가 동일한 호스트 내에서 상호작용해야 하는 경우에 사용됩니다.

 

 

비교 요약

특성 Bridge 네트워크 Host 네트워크
정의 가상 네트워크 사용 호스트 네트워크 직접 사용
격리성 높음 낮음
성능 약간의 오버헤드 최상의 성능
네트워크 설정 유연하지만 복잡 단순
포트 매핑 필요 불필요
보안 강화된 보안 낮은 보안성

결론

Docker 네트워킹을 통해 컨테이너 간 통신과 외부 네트워크와의 상호작용을 쉽게 설정할 수 있습니다. 브릿지 네트워크는 독립 실행형 애플리케이션 컨테이너에 적합하며, 호스트 네트워크는 네트워크 성능이 중요한 경우에 유용합니다. 이러한 네트워크 드라이버를 적절히 활용하여 애플리케이션의 요구에 맞는 네트워크 구성을 구현할 수 있습니다.

 
 

관련글 더보기