← 목록으로
📅 2026.05.07
Docker 네트워크 세팅: Inbound/Outbound 제어 및 포트 연결
TechStudyContainerNetworkPort

독립된 컨테이너들이 서로 데이터를 주고받거나, 외부 클라이언트의 접속을 허용하기 위해서는 체계적인 네트워크 세팅이 필수적입니다.


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 공식 튜토리얼 기준):
    # 사용자 정의 브리지 네트워크 생성
    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) 과정이 생략되므로 대용량 패킷을 다루는 성능 중시 애플리케이션에 유리하지만, 포트 충돌 가능성을 항상 염두에 두어야 합니다.