본문 바로가기

Java/Deploy

[Docker] 도커 포트포워딩

반응형

 

Http 요청을 받는 애플리케이션을 사용하려면 컨테이너 밖에서 온 요청을 컨테이너 안에 있는 애플리케이션에 전달해줘야 한다.

그 역할을 담당하는 것이 바로 도커의 포트 포워딩 이다.

 

포트 포워딩이 되어있지 않은 경우, 아래와 같은 현상을 확인할 수 있다.

 

% curl http://localhost:8080/
curl: (7) Failed to connect to localhost port 8080: Connection refused

 

그렇다면 포트 포워딩이란?

호스트 머신의 포트를 컨테이너 포트와 연결해 컨테이너 밖에서 온 통신을 컨테이너 포트로 전달한다.

이 기능 덕분에 컨테이너 포트를 컨테이너 외부에서도 이용할 수 있다.

 

그러면 지금부터 포트 포워딩을 해보자.

 

1 ) 실행 중인 컨테이너를 정지시킨다.

% docker container stop $(docker container ls --filter "ancestor=example/echo" -q)

5f0aaba90b06

 

2 ) 호스트 포트 9000을 컨테이너 포트 8080에 연결하여 포트 포워딩 적용

% docker container run -d -p 9000:8080 example/echo:latest

a0226db4bfeb4ec8dc0de966c65d5690b8e3e842f5ef023962df691692ffa841

 

3 ) 앞전에 만든 어플리케이션의 응답 메시지가 정상적으로 노출되는 것을 확인할 수 있음

% curl http://localhost:9000

Hello Docker!!

 

즉, HTTP 요청이 정상적으로 전달됐고, 그 응답을 받아온 것이다 !!

 

+ 호스트 포트를 다음과 같이 생략할 수 있다.

   이런 경우, 빈 포트가 에페메랄(ephemeral) 포트로 자동 할당된다.

 

% docker container run -d -p 8080 example/echo:latest 

848f6e416f5843106d998b11b89a5dc1fd1b1693cc472636af1c817b7fb8d317
% docker container ls

CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                     NAMES
848f6e416f58        example/echo:latest   "go run /echo/main.go"   21 seconds ago      Up 20 seconds       0.0.0.0:32768->8080/tcp   inspiring_kepler

 


[참고] 이전 내용 : chati.tistory.com/123

 

[Docker] 도커 이미지 / 컨테이너 다루기

도커의 사용법은 크게 아래와 같이 나뉜다. 이미지를 대상으로 하는 것 컨테이너를 대상으로 하는 것 그러면 도커 이미지는 무엇일까? 도커 이미지는 도커 컨테이너를 만들기 위한 템플릿 이다.

chati.tistory.com

 

반응형

❥ CHATI Github