5장: Single-host networking (단일 호스트 네트워킹)
이전 장에서 우리는 컨테이너의 실행 환경, 스토리지 관리 등을 다루었다면, 이번 장에서는 컨테이너 네트워킹에 집중합니다. 대부분의 애플리케이션은 네트워크를 통해 통신하므로, 컨테이너화된 애플리케이션의 네트워크 접근 방식, 서비스 노출, 컨테이너 간 통신을 이해하는 것은 매우 중요합니다.
기본 개념: 프로토콜, 인터페이스, 포트
- 프로토콜(Protocol): 소프트웨어 간 통신을 위한 “언어”입니다. 예: HTTP, TCP, UDP 등
- 네트워크 인터페이스(Interface): IP 주소를 갖는 네트워크 장치. 로컬호스트(lo), 이더넷(eth0) 등이 있으며, 각 인터페이스는 특정 네트워크 위치를 의미합니다.
- 포트(Port): 인터페이스 위에서 특정 프로세스나 서비스가 통신하는 논리적 "문"입니다. 예를 들어, 웹 서버는 보통 80번 포트를 사용합니다.
Docker 컨테이너 네트워킹 개념
- Docker는 컨테이너를 네트워크에 연결할 때 격리된 네트워크 네임스페이스를 사용합니다.
- 기본적으로 컨테이너는 Docker 엔진이 관리하는 가상 네트워크(브리지 네트워크 등)에 연결되며, 각 컨테이너는 해당 네트워크 내에서 고유한 IP 주소를 할당받습니다.
- 컨테이너 네트워크는 NAT를 사용하여 외부 네트워크와 격리합니다. 즉, 기본적으로 외부에서는 컨테이너를 직접 볼 수 없으며, 호스트를 통해 접근할 수 있습니다.
디폴트 네트워크 유형
- bridge: 기본 가상 네트워크. 같은 호스트 내 컨테이너 간 통신 허용.
- host: 호스트 네트워킹을 그대로 사용하는 특수 모드로, 컨테이너가 호스트와 동일한 네트워크 인터페이스와 포트를 공유합니다.
- none: 네트워크가 없는 모드로, 컨테이너는 루프백(127.0.0.1)만 사용 가능. 완전한 네트워크 격리 상태.
사용자 정의 브리지 네트워크
- 직접
docker network create
로 커스텀 브리지 네트워크를 만들 수 있습니다. - 서브넷, IP 범위, attachable 옵션 등을 지정해 네트워크를 유연하게 구성할 수 있습니다.
- 컨테이너를 해당 네트워크에 연결하면 지정한 범위 내에서 IP 주소가 할당됩니다.
- 여러 브리지 네트워크를 하나의 컨테이너에 연결해 복잡한 네트워크 토폴로지를 구축할 수도 있습니다.
컨테이너 포트 노출(Publishing Services)
- 외부에서 컨테이너 내부 서비스를 접근하기 위해서는 호스트 포트를 컨테이너 포트와 매핑하는 NodePort Publishing 방식을 사용합니다.
docker run -p 8080:80
와 같이 호스트 8080 포트를 컨테이너 80포트로 포워딩 가능.- 컨테이너 내부 서비스는 여전히 자체 IP와 포트를 사용하지만, 외부 클라이언트는 호스트 IP:포트로 접근합니다.
- docker port 명령어로 컨테이너의 실제 포트 매핑 상태를 확인할 수 있습니다.
DNS 및 네트워크 이름 해석
- 컨테이너는 기본적으로 브리지 네트워크 내에서 컨테이너 이름을 호스트네임으로 사용해 내부적으로 호스트 이름 해석을 제공하지만, 외부 DNS 서버 사용이나 --dns, --dns-search, --add-host 옵션으로 DNS 설정을 커스터마이징할 수 있습니다.
- 이를 통해 내부 개발/테스트 환경에 맞는 DNS 룰을 적용하거나, 특정 호스트명을 임의의 IP로 매핑해 트래픽을 조정할 수 있습니다.
주의 사항
- Docker 브리지 네트워크는 컨테이너 간 네트워크 통신을 격리하지 않습니다. 즉, 같은 네트워크 내 컨테이너 간 완전한 통신이 가능하므로, 애플리케이션 레벨에서 접근 제어가 필요합니다.
- host 모드는 보안이나 포트 충돌 우려가 있어 멀티테넌트 환경에서는 신중해야 합니다.
- none 모드는 완전히 격리된 환경이 필요할 때(네트워크 불필요한 앱, 보안성 강화) 유용합니다.
- DNS, IP 매핑 등을 통해 환경에 따른 유연한 서비스 디스커버리를 구현할 수 있습니다.
- 보다 복잡한 멀티호스트(다중 노드) 환경에서는 오버레이 네트워크나 외부 오케스트레이션 툴(예: Kubernetes) 사용을 고려해야 합니다.
정리:
이 장에서는 Docker 컨테이너의 단일 호스트 네트워킹에 대해 배웠습니다. 브리지 네트워크를 통한 기본 통신, host/none 네트워크를 통한 특수 모드, 포트 퍼블리싱을 통한 외부 접근, DNS 설정, 사용자 정의 네트워크와 IP 범위 지정 방법 등을 다루었습니다. 결과적으로 Docker 네트워크를 잘 활용하면, 환경에 맞는 유연한 네트워크 토폴로지를 구성하고 서비스 접근 방식을 관리할 수 있게 됩니다.
'Docker' 카테고리의 다른 글
Docker in Action Chapter 7 (0) | 2024.12.09 |
---|---|
Docker in Action Chapter 6 (0) | 2024.12.09 |
Docker in Action Chapter 4 (0) | 2024.12.09 |
Docker in Action Chapter 3 (0) | 2024.12.09 |
Docker in Action Chapter 2 (1) | 2024.12.09 |