Published on

도커에서 동일한 포트를 사용할 수 있는 이유

Authors
  • avatar
    Name
    손예지(Liv)

이전에 도커에서 데이터베이스를 연결할 때 동일한 호스트 포트를 사용해 연결에 오류가 있었던 적이 있습니다. 당시에는 "동일한 호스트 포트를 사용할 수 없다" 정도로만 이해했는데, 도커에 대해 학습 하면서 내부에서 어떻게 매핑 되는지 그림과 함께 살펴보았습니다.

도커에서 포트 매핑은 [호스트 포트]:[컨테이너 포트] 로 매핑됩니다. 이전처럼 데이터베이스를 예시로 생각해보겠습니다. Postgresql 데이터베이스를 사용한다고 가정했을때 Postgresql의 기본 포트인 5432가 할당됩니다. 도커에 등록할 경우 5432:5432로 매핑이 될것입니다.

만약 두개의 postgresql 데이터베이스를 사용한다고 가정했을때 컨테이너 포트인 5432는 동일하게 사용합니다. 동일한 컨테이너 포트를 사용할 수 있는 이유는 도커에서 각 컨테이너는 독립된 환경으로 실행되기 때문에, 충돌이 발생하지 않습니다.

반면 호스트 포트는 동일한 포트로 매핑이 불가능합니다. 호스트 시스템에서 하나의 프로세스는 하나의 포트만 사용할 수 있습니다. 두개의 컨테이너가 같은 호스트 포트를 사용하려고 하면 포트에서 충돌이 발생합니다. 호스트 포트는 도커 환경을 포함한 전체 로컬 환경에서 적용됩니다.

참고자료


Networking in Compose
내일배움캠프 프로젝트 관리 심화 강의 중 docker 부분 참고