[Docker] 도커 네트워크
✅ 도커 네트워크: 컨테이너들의 소통 창구
지난 포스팅에서는 도커 컨테이너를 효율적으로 관리하는 다양한 CLI 명령어들을 살펴보았습니다. 이번에는 도커 컨테이너들이 서로 통신하고 외부와 연결되는 방법, 즉 도커 네트워크에 대해 알아보겠습니다. 컨테이너 간의 네트워크 연결은 복잡한 애플리케이션을 구축하고 운영하는 데 필수적인 요소입니다. 함께 도커 네트워크의 세계로 떠나볼까요?
☑️ 도커 컨테이너 네트워크의 기본: 브리지 네트워크
도커 컨테이너를 실행하면 기본적으로 브리지 네트워크에 연결됩니다. 브리지 네트워크는 컨테이너들이 서로 통신하고 외부 네트워크와 연결될 수 있도록 가상의 네트워크 인터페이스를 생성합니다.
- 도커 컨테이너 네트워크 생성 과정
- 도커는 컨테이너를 실행할 때마다 컨테이너 내부에 가상 네트워크 인터페이스(eth0)를 생성합니다.
- 호스트 시스템에는 컨테이너의 가상 인터페이스와 연결되는 veth(Virtual Ethernet) 인터페이스가 생성됩니다.
- veth 인터페이스는 도커 브리지(docker0)에 연결되어 컨테이너들이 서로 통신할 수 있도록 합니다.
- 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 작동 방식
- 컨테이너가 실행되면 도커는 컨테이너 이름과 IP 주소를 DNS 서버에 등록합니다.
- 다른 컨테이너가 특정 컨테이너 이름으로 통신을 시도하면, 도커 DNS 서버는 해당 이름에 해당하는 IP 주소를 반환합니다.
- 컨테이너는 반환된 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.