Data-Driven System Development/DocKer

Docker 네트워크 II

Data Jun 2025. 2. 24. 15:42

Docker를 활용할 때 네트워크(Networking)와 포트 바인딩(Port Binding) 개념을 이해하는 것은 필수입니다.
이번 포스트에서는 포트 매핑과 네트워크 설정을 통한 컨테이너 통신에 대해 정리해보겠습니다.

 

포트 바인딩(Port Binding)과 매핑(Port Mapping)

 

 

도커 컨테이너 내부의 서비스(예: 웹 서버)는 기본적으로 외부에서 접근할 수 없습니다. 따라서 호스트 시스템의 특정 포트와 컨테이너 내부 포트를 연결하는 작업이 필요합니다. 이를 **포트 바인딩(Port Binding) 또는 포트 매핑(Port Mapping)**이라고 합니다.

 

 

🔹 0.0.0.0:4000->3000/tcp → 호스트의 4000 포트가 컨테이너의 3000 포트로 매핑된 상태

📌 즉, localhost:4000으로 접속하면 컨테이너 내부의 3000 포트에 요청이 전달됩니다.

 

 

✔ -p 4000:3000 → 호스트의 4000번 포트를 컨테이너의 3000번 포트로 연결
외부(호스트)에서 localhost:4000으로 접근하면, 내부 컨테이너의 3000 포트와 연결됨

 

✅ 즉, 포트 바인딩이 제대로 설정되지 않았다면 localhost:3000에서 접근할 수 없고, localhost:4000을 사용해야 합니다!

 

✔ other-network라는 사용자 지정 네트워크 생성

✔ --network other-network → other-network를 통해 컨테이너 간 통신 가능
✔ host.docker.internal:4000 → 호스트의 4000번 포트를 통해 다른 컨테이너에 접근

🚀 결론

포트 바인딩(Port Binding)이란?
→ 호스트의 특정 포트를 컨테이너 내부 포트로 연결하는 과정

포트 바인딩 예제
→ docker run -p 4000:3000 ... (호스트 4000 → 컨테이너 3000)

컨테이너 네트워크 설정
→ docker network create other-network 후 --network 옵션 사용

포트 바인딩이 정상적으로 적용되었는지 확인하는 방법
1️⃣ docker ps 명령어로 포트 매핑 확인
2️⃣ docker inspect로 PortBindings 정보 확인
3️⃣ 웹 브라우저에서 localhost:4000 접속 테스트

이제 Docker 컨테이너 네트워크와 포트 바인딩을 완벽하게 이해했어요! 🚀

 

 

Docker에서 EXPOSE 명령어는 컨테이너가 특정 포트를 사용한다는 정보를 기록하는 용도이지,
실제로 포트를 외부로 노출하거나, 접근을 허용하는 기능이 아닙니다.

 

 

이 코드는 컨테이너 내부에서 애플리케이션이 3000번 포트를 사용한다고 기록하는 것일 뿐, 호스트 시스템에서 이 포트로 접근할 수 있도록 노출하는 기능이 아닙니다.

 

✅ EXPOSE는 문서화(documentation) 목적이며, 실제로 컨테이너 외부에서 접근하려면 -p 옵션을 사용해야 합니다.

 

 

  • --expose 3000은 컨테이너 내부에서만 3000번 포트가 사용된다고 알리는 것일 뿐, 호스트에서 localhost:3000으로 접근할 수 있도록 열어주는 것이 아닙니다.
  • 결과적으로, 웹 브라우저에서 localhost:3000으로 접속하면 연결이 거부됨 (ERR_CONNECTION_REFUSED)

🔹 결론

EXPOSE는 포트를 노출하는 것이 아니라, 컨테이너 내부에서 사용하는 포트를 문서화하는 용도
외부에서 접근하려면 반드시 -p 옵션을 사용해야 함
--expose만 사용하면 웹 브라우저에서 localhost:3000으로 접근할 수 없음
-p 3000:3000을 사용해야 외부에서 접근 가능

이제 EXPOSE와 -p의 차이를 확실하게 이해했어요! 🚀

 

 

'Data-Driven System Development > DocKer' 카테고리의 다른 글

Docker Compose란?  (0) 2025.04.21
Docker Volume  (0) 2025.02.24
Docker 네트워크  (0) 2025.02.21
Docker 컨테이너 실행 및 환경 변수 설정  (0) 2025.02.21
Docker 이미지 빌드 과정과 최적화 방법  (1) 2025.02.21