DevOps/Docker

[Docker] 컨테이너 포트와 호스트 포트는 무엇일까?

ki1111m2 2023. 6. 29. 14:18

지금까지 도커를 사용하면서 컨테이너를 실행시킬 때 -p 옵션으로 포트를 지정했다.

하라고 해서 했는데 왜하는 건지, 무슨 의미인지 모른 체로 나중에 찾아봐야지..라고만 생각했다.

 

AWS ECS에서 태스크 정의를 생성할 때 컨테이너 포트를 설정하는 파트가 있었는데 이게 뭔지 도대체 무슨 역할인지 몰라서 찾아보기를 실행에 옮겼다.

 

 


AWS 공식 문서에서 태스크 정의 포트 매핑에 대해 찾아봤다. 

 

Container port와 Host port 두 종류가 있다고 한다.

두 포트의 차이점이 뭔지 몰랐는데, 도커 컨테이너를 실행할 때 -p 옵션으로 줬던 포트 옵션이 호스트포트:컨테이너포트였던 기억이 있어서 도커 포트에 대해 찾아봤다.

 

호스트 포트의 경우 외부에서 접속하게 되는 호스트(로컬)의 포트를 의미하고, 컨테이너 포트의 경우 동작 중인 컨테이너의 포트를 의미한다. 문을 열어준다고 해야할까?

-p 옵션을 통해 두 포트를 연결해줄 수 있다. 사용자는 localhost:호스트포트로 접속을 하고, 호스트 포트는 컨테이너 포트에 연결되어 있기 때문에 컨테이너가 동작하고 있는 포트로 접속할 수 있게 된다. 

 

예를 들어, docker run -p 3000:5000 으로 컨테이너를 가동한다.

사용자의 경우, localhost:3000 으로 접속하게 된다.

로컬의 3000번 포트는 컨테이너의 5000번 포트와 연결되어 있어 컨테이너에 접속할 수 있게 된다.

 

AWS ECS 태스크 정의에서 설정한 컨테이너 포트도 이와 같은 개념인 것 같다. ECS를 Fargate로 만드는 경우 호스트 포트는 빈칸으로 두면 자동으로 컨테이너 포트와 같게 연결된다.

 


참고

https://blog.naver.com/alice_k106/220278762795