Post

[Docker] 도커 네트워크

✅ 도커 네트워크: 컨테이너들의 소통 창구

지난 포스팅에서는 도커 컨테이너를 효율적으로 관리하는 다양한 CLI 명령어들을 살펴보았습니다. 이번에는 도커 컨테이너들이 서로 통신하고 외부와 연결되는 방법, 즉 도커 네트워크에 대해 알아보겠습니다. 컨테이너 간의 네트워크 연결은 복잡한 애플리케이션을 구축하고 운영하는 데 필수적인 요소입니다. 함께 도커 네트워크의 세계로 떠나볼까요?

☑️ 도커 컨테이너 네트워크의 기본: 브리지 네트워크

도커 컨테이너를 실행하면 기본적으로 브리지 네트워크에 연결됩니다. 브리지 네트워크는 컨테이너들이 서로 통신하고 외부 네트워크와 연결될 수 있도록 가상의 네트워크 인터페이스를 생성합니다.

  • 도커 컨테이너 네트워크 생성 과정
    1. 도커는 컨테이너를 실행할 때마다 컨테이너 내부에 가상 네트워크 인터페이스(eth0)를 생성합니다.
    2. 호스트 시스템에는 컨테이너의 가상 인터페이스와 연결되는 veth(Virtual Ethernet) 인터페이스가 생성됩니다.
    3. veth 인터페이스는 도커 브리지(docker0)에 연결되어 컨테이너들이 서로 통신할 수 있도록 합니다.
    4. iptables 규칙을 통해 컨테이너의 네트워크 트래픽을 관리하고 NAT(Network Address Translation)를 수행하여 컨테이너가 외부 네트워크와 통신할 수 있도록 합니다.
  • 브리지 네트워크의 특징
  • 컨테이너 간 통신: 동일한 브리지 네트워크에 연결된 컨테이너들은 서로 통신할 수 있습니다.
  • 외부 네트워크 연결: 브리지 네트워크는 호스트 시스템의 네트워크 인터페이스를 통해 외부 네트워크와 연결됩니다.
  • 격리된 네트워크 환경: 각 컨테이너는 독립된 네트워크 네임스페이스를 가지므로 다른 컨테이너나 호스트 시스템의 네트워크 설정에 영향을 주지 않습니다.

☑️ 사용자 정의 네트워크: 더욱 유연한 네트워크 구성

도커는 브리지 네트워크 외에도 다양한 네트워크 드라이버를 지원하여 사용자가 필요에 따라 네트워크를 구성할 수 있도록 합니다.

  • 네트워크 드라이버 종류
    • bridge: 기본 브리지 네트워크 드라이버
    • host: 컨테이너가 호스트 시스템의 네트워크 네임스페이스를 직접 사용합니다.
    • none: 컨테이너에 네트워크 인터페이스를 생성하지 않습니다.
    • overlay: 여러 도커 호스트에 걸쳐 컨테이너들이 통신할 수 있는 오버레이 네트워크를 생성합니다.
    • macvlan: 컨테이너에 호스트 시스템의 물리 네트워크 인터페이스에 연결된 MAC 주소를 할당합니다.
  • 사용자 정의 네트워크 생성 및 관리
  • docker network create: 사용자 정의 네트워크를 생성합니다.
  • docker network ls: 생성된 네트워크 목록을 확인합니다.
  • docker network inspect: 네트워크의 상세 정보를 확인합니다.
  • docker network connect, docker network disconnect: 실행 중인 컨테이너를 네트워크에 연결하거나 연결을 해제합니다.
  • docker network rm: 네트워크를 삭제합니다.

☑️ 도커 DNS: 컨테이너 이름으로 쉽게 통신하기

도커는 내장 DNS 서버를 제공하여 컨테이너들이 IP 주소 대신 이름으로 서로 통신할 수 있도록 합니다.

  • 도커 DNS 작동 방식
    1. 컨테이너가 실행되면 도커는 컨테이너 이름과 IP 주소를 DNS 서버에 등록합니다.
    2. 다른 컨테이너가 특정 컨테이너 이름으로 통신을 시도하면, 도커 DNS 서버는 해당 이름에 해당하는 IP 주소를 반환합니다.
    3. 컨테이너는 반환된 IP 주소를 사용하여 통신을 수행합니다.
  • -net-alias 옵션: 여러 컨테이너를 동일한 이름으로 그룹화하여 로드 밸런싱 또는 서비스 디스커버리에 활용할 수 있습니다.

☑️ 컨테이너 Proxy: 부하 분산과 서비스 안정성 향상

컨테이너 Proxy는 여러 컨테이너에 대한 부하를 분산하고 서비스 안정성을 향상시키는 데 사용됩니다. Nginx, HAProxy 등 다양한 도구를 활용하여 컨테이너 Proxy를 구축할 수 있습니다.

  • Nginx를 활용한 컨테이너 Proxy

Nginx는 웹 서버 및 리버스 프록시 서버로 널리 사용되는 오픈 소스 소프트웨어입니다. Nginx를 컨테이너 Proxy로 활용하면 다음과 같은 이점을 얻을 수 있습니다.

  • 부하 분산: 여러 백엔드 컨테이너에 대한 요청을 효율적으로 분산하여 성능을 향상시키고 서비스 안정성을 높입니다.
  • 라우팅: URL 경로, HTTP 헤더 등을 기반으로 요청을 특정 백엔드 컨테이너로 라우팅할 수 있습니다.
  • SSL 터미네이션: HTTPS 요청을 처리하고 암호화된 트래픽을 복호화하여 백엔드 컨테이너로 전달합니다.
  • 캐싱: 정적 콘텐츠를 캐싱하여 응답 시간을 단축하고 서버 부하를 줄입니다.
  • HAProxy를 활용한 컨테이너 Proxy

HAProxy는 TCP 및 HTTP 기반의 고성능 로드 밸런서 및 프록시 서버입니다. HAProxy를 컨테이너 Proxy로 활용하면 다음과 같은 이점을 얻을 수 있습니다.

  • 고성능: 높은 처리량과 낮은 지연 시간을 제공하여 대규모 트래픽 처리에 적합합니다.
  • 다양한 부하 분산 알고리즘: 라운드 로빈, 가중 라운드 로빈, 최소 연결 등 다양한 부하 분산 알고리즘을 지원합니다.
  • 상태 확인: 백엔드 컨테이너의 상태를 주기적으로 확인하여 장애 발생 시 자동으로 트래픽을 다른 컨테이너로 전달합니다.
  • 세션 유지: 사용자 세션을 특정 백엔드 컨테이너에 고정하여 세션 정보를 유지합니다.
This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.