카테고리 없음

Docker Network

김 정출 2024. 10. 18. 23:21

Docker Network

  • Docker 네트워크는 컨테이너들이 서로 통신하고 외부 네트워크와 연결될 수 있도록 해주는 Docker의 중요한 기능 중 하나입니다.
  • Docker는 다양한 네트워크 드라이버를 제공하여 각기 다른 네트워크 요구 사항을 충족할 수 있도록 합니다. Docker 네트워크에 대한 주요 개념을 살펴보겠습니다.

Docker 네트워크 드라이버

Docker는 기본적으로 여러 네트워크 드라이버를 지원하며, 각 드라이버는 다른 방식으로 네트워크를 구성합니다.

  • bridge (브리지) 네트워크:
    • Docker의 기본 네트워크 모드입니다.
    • 동일한 호스트에서 실행되는 여러 컨테이너가 서로 통신할 수 있도록 합니다.
    • 외부 네트워크와의 통신은 NAT(Network Address Translation)를 통해 가능하며, 각 컨테이너는 고유한 IP 주소를 갖습니다.
  • host (호스트) 네트워크:
    • 컨테이너가 호스트의 네트워크와 직접적으로 통신하도록 설정합니다.
    • 성능이 중요한 경우에 사용되며, 컨테이너는 별도의 네트워크 인터페이스 없이 호스트의 IP와 포트를 사용합니다.
    • 격리 수준이 낮아 보안적인 측면에서 주의가 필요합니다.
  • none (네트워크 없음):
    • 컨테이너에 네트워크 인터페이스를 제공하지 않는 옵션입니다.
    • 네트워크가 필요 없는 작업(예: 순수 계산 작업)이나 매우 제한된 네트워크 환경에서 사용될 수 있습니다.
  • overlay (오버레이) 네트워크:
    • 여러 호스트에 걸쳐 있는 컨테이너들이 네트워크를 통해 통신할 수 있도록 합니다.
    • Swarm 모드 또는 Kubernetes와 같은 오케스트레이션 도구와 함께 사용됩니다.
    • VXLAN(virtual extensible LAN)과 같은 기술을 이용하여 분산 환경에서 컨테이너 간 통신을 지원합니다.
  • macvlan 네트워크:
    • 각 컨테이너가 네트워크 상에서 고유한 MAC 주소를 가지도록 설정합니다.
    • 컨테이너가 물리적 네트워크 인터페이스와 직접적으로 연결되어야 하는 경우 유용합니다.
    • 복잡한 네트워크 구성을 할 때 사용됩니다.

Docker 네트워크 관련 명령어

  • docker network ls: 현재 Docker에서 사용 가능한 네트워크 목록을 표시합니다.
  • docker network create <네트워크 이름>: 새 네트워크를 생성합니다.
  • docker network inspect <네트워크 이름>: 네트워크의 세부 정보를 확인할 수 있습니다.
  • docker network connect <네트워크 이름> <컨테이너>: 특정 네트워크에 컨테이너를 연결합니다.
  • docker network disconnect <네트워크 이름> <컨테이너>: 특정 네트워크에서 컨테이너를 분리합니다.

컨테이너 간 통신

컨테이너 간 통신은 기본적으로 같은 네트워크에 연결되어 있을 때 가능합니다. 예를 들어, 같은 브리지 네트워크에 속한 컨테이너들은 서로의 IP 주소로 통신할 수 있습니다. 하지만 서로 다른 네트워크에 있는 컨테이너들 간에는 기본적으로 통신이 불가능하며, 이를 위해서는 네트워크를 연결하거나, 별도의 라우팅 설정이 필요합니다.

사용 사례

  • 개발 환경: 브리지 네트워크를 사용하여 로컬에서 여러 컨테이너를 실행하고 서로 통신하게 할 수 있습니다.
  • 프로덕션 환경: 오버레이 네트워크를 사용하여 분산된 여러 호스트에서 실행되는 컨테이너 간의 안전하고 확장 가능한 통신을 구현할 수 있습니다.
  • 고성능 네트워킹: 호스트 네트워크 모드를 사용하여 네트워크 성능의 병목을 피할 수 있습니다.

이 외에도 Docker 네트워크를 통해 고급 네트워크 토폴로지 구성이나 컨테이너와 외부 서비스 간의 통신을 설정할 수 있습니다. 네트워크 옵션을 적절히 선택하면, 컨테이너 기반 애플리케이션의 성능과 보안을 강화할 수 있습니다.