테크 로그포스 Tech Log Force

[Docker] run 명령어, Port-forwarding 본문

Docker

[Docker] run 명령어, Port-forwarding

Yeji Heo 2024. 5. 12. 20:34

지난 글에서 Docker라는 Container Engine을 통해 Image로 Container를 생성하고 삭제하는 기초적인 실습을 해보았다

오늘도 더 나아가서 Container 다루는 '사용법'과 그 목적을 공부할 것이다.

 

[Docker] Linux서버에 Docker설치, Container (생성-실행-정지-삭제)

지난 글에서 Docker개념과 대해 정리했다. [Docker] Container, Image, Docker개념을 쉽게 이해하기1. Container항만의 화물을 옮길 때 사용하는 컨테이너를 떠올려보자. 만약 컨테이너가 없었다면?사과는 사

crayeji.tistory.com


1. Docker run

사실 이미지를 pull하고 컨테이너를 create, start하는 것은 교과서적인 내용이었다.

run 명령어를 통해 (이미지 가져오기+컨테이너생성+컨테이너실행+ α) 를 한꺼번에 할 수 있다. 

docker container run --name tomcat8100 \
				tomcat:9.0.74-jre8

 

한편, + α 는 뭐가 있을까? 아래와 같은 작업이 있다.

docker container run --name tomcat8100 \
				-p 8100:8080 \
				tomcat:9.0.74-jre8

-p 8100:8080 가 추가되었는데, 이는 Port-forwarding을 한 것이다.

 


 

2. Port-forwarding

docker container run --name tomcat8100 \ tomcat:9.0.74-jre8

위와 같이 Container를 생성 및 실행했다고 하자.

Container에 Tomcat이 있고 그 Container를 실행하면 Tomcat이 실행되며, 포트는 8080 일 것이다. (Tomcat의 default port)

내 Linux서버 위에 이 컨테이너를 올려뒀으니 이제 나는 서버 접속을 통해 WAS에도 접속할 수 있을까?

그렇지가 않다. 사실 당연한 게, 브라우저에 서버공인IP:8080을 입력하면 Host Linux서버에서 8080포트를 찾을 것이다.

그러나 서버에 8080포트를 가진 WAS가 설치된 게 아니다. 컨테이너에 설치되어 있다. 

 

즉, 외부에서부터 Host에 특정 Port로 들어온 요청을

Docker가 Container의 WAS Port인 8080으로 연결. forwarding 시켜줘야 하는 것이다.

-p 1234:8080   ==> 1234포트로 들어온 것을 컨테이너의 WAS의 8080으로 Port forwarding

docker container stop tomcat8100
docker container rm tomcat8100

컨테이너를 삭제하고 아래와 같이 포트포워딩하여 다시 만들어보자.

Host에 8100으로 들어오면 Container에 8080으로 연결시켜주도록 하였다. 

docker container ls -a로 다시 확인해보면 PORTS부분에 Port-forwarding이 반영 된 것도 확인할 수 있다.

docker container run --name tomcat8100 \
				-p 8100:8080 \
				tomcat:9.0.74-jre8

 

다시 브라우저에서 확인해보자

Host공인IP:8100 을 입력했다.

404가 떠서 막연히 에러가 난다고 생각할 수도 있는데, Apache Tomcat/9.0.74가 정상적으로 작동한 거다.

단지 아직 war등 배포할 파일을 넣지 않았고, 그러니 당연히 index.html이나 index.jsp가 없으니까 404가 뜰 뿐

WAS에 성공적으로 request한 것을 확인하였다.

 


 

Container를 통해 필요한 WAS환경을 아주 편하게 구축하고 Docker로 실행해보면서

왜 요즘 사람들이 Docker..Docker..하는지 조금은 알게 된 시간이었다!!!

다음 글에서는 war를 넣어서 내가 개발한 무언가를 '배포'까지 해보겠다

 

Comments