Docker 네트워크 세팅: Inbound/Outbound 제어 및 포트 연결
독립된 컨테이너들이 서로 데이터를 주고받거나, 외부 클라이언트의 접속을 허용하기 위해서는 체계적인 네트워크 세팅이 필수적입니다.
1. Port 연결 (포트 포워딩)
포트 포워딩(-p)은 외부에서 컨테이너 내부로 접속할 수 있도록 문을 열어주는 핵심 기능입니다.
-
docker run -p [Host_IP]:[Host_Port]:[Container_Port]구조를 가집니다. -
예시:
p 8080:80 -
호스트 머신의
8080포트로 들어오는 모든 요청(Inbound 트래픽)을, 해당 컨테이너 내부의80포트로 전달합니다. -
보안 제어: 외부망 전체에 오픈하지 않으려면 특정 IP만 바인딩할 수 있습니다.
-
예:
p 127.0.0.1:8080:80(오직 해당 호스트 내부에서만 접근 가능하도록 격리)
2. Inbound 및 Outbound 제어 원리
-
Inbound (들어오는 트래픽):
-
기본적으로 컨테이너 내부는 완전히 폐쇄되어 있습니다.
-
p포트 포워딩을 명시적으로 선언한 포트로만 Inbound 트래픽이 허용됩니다. -
Outbound (나가는 트래픽):
-
컨테이너 내부에서 외부 인터넷으로 접속하는 트래픽은 기본적으로 허용됩니다.
-
컨테이너의 사설 IP 대역이 호스트의
docker0브리지 인터페이스를 거쳐 호스트의 공인 IP로 NAT(Network Address Translation) 변환되어 외부망으로 나갑니다.
3. 네트워크 드라이버 (Network Types)
용도에 따라 다양한 컨테이너 네트워크 방식을 선택할 수 있습니다.
1. Bridge 네트워크 (기본)
- 기본적으로
docker0라는 가상 스위치가 생성되어 모든 컨테이너를 연결합니다. - 사용자 정의 Bridge 네트워크 생성 및 테스트 (docker.io 공식 튜토리얼 기준):
bash
# 사용자 정의 브리지 네트워크 생성
docker network create alpine-net
# 해당 네트워크에 첫 번째 컨테이너 연결
docker run -dit --name alpine1 --network alpine-net alpine ash
# 두 번째 컨테이너 연결
docker run -dit --name alpine2 --network alpine-net alpine ash
# alpine1 내부에 접속하여 alpine2로 통신 테스트 (내장 DNS 활용)
docker exec -it alpine1 ping -c 4 alpine2- 강점: 같은 커스텀 브리지 네트워크에 묶인 컨테이너들은 복잡한 IP 주소를 외울 필요 없이, **컨테이너 이름(DNS)**으로 서로 완벽하게 통신할 수 있습니다.
2. Host 네트워크
- 옵션:
-network host - 컨테이너가 자신만의 네트워크 격리 영역을 가지지 않고, 호스트 머신의 네트워크 스택을 100% 공유합니다.
- 포트 맵핑(
p) 과정이 생략되므로 대용량 패킷을 다루는 성능 중시 애플리케이션에 유리하지만, 포트 충돌 가능성을 항상 염두에 두어야 합니다.
댓글
GitHub 계정으로 의견이나 질문을 남길 수 있습니다.