본문 바로가기

배포

Docker + War + Tomcat 배포 실습(Tomcat Port 변경)

Windows 운영체제에서 해보도록 하겠습니다.

docker 설치 및 war 파일이 준비되었다는 가정하에 실습해 보도록 하겠습니다.

 

저의 프로젝트 웹 포트는 8050입니다.

 

저의 프로젝트 구조도입니다.

배포가 완료되면, target 또는 out 파일에 war 파일이 만들어집니다.

해당 war 파일을 톰켓에서 사용할 수 있도록 다음과 같이 Dockerfile을 작성하면 됩니다.

1.

FROM tomcat:9.0.70-jdk11-corretto-al2

9.0.70은 톰캣의 버전이고, jdk11은 자바 11버전을 사용하겠다는 의미입니다.

https://hub.docker.com/_/tomcat 에서 다양한 JDK용 톰켓 이미지를 확인하실 수 있습니다.

 

tomcat - Official Image | Docker Hub

tomcat •• Apache Tomcat is an open source implementation of the Java Servlet and JavaServer Pages technologies

hub.docker.com

해당 버전은 본인의 프로젝트에 알맞게 골라서 사용하시면 됩니다.

 

2.

ARG WAR_FILE=out/artifacts/producer/*.war

ARG는 변수를 사용하겠다는 의미입니다.

저의 경우 WAR_FILE이라는 변수에 war 파일이 저장된 위치를 지정했습니다.

 

3.

RUN rm -Rf /usr/local/tomcat/webapps/ROOT

해당 ROOT위치의 파일을 전부 삭제하겠다는 의미입니다.

톰캣은 해당 ROOT의 war 파일을 실행시킵니다.

본인이 만든 war 파일을 실행시키기 위해, 이전에 있던 파일을 전부 삭제시킵니다.

 

4.

COPY ${WAR_FILE} /usr/local/tomcat/webapps/ROOT.war

본인이 만든 war를 톰캣 내부 webapps에 ROOT.war라는 이름으로 복사합니다.

톰캣은 ROOT.war를 기본으로 실행시킵니다.

(ROOT 가 아닌 다른 이름을 사용하시면 톰캣 conf에 Context 태그를 추가해야합니다.)

 

5. 완성본

FROM tomcat:9.0.70-jdk11-corretto-al2

ARG WAR_FILE=out/artifacts/producer/*.war

RUN rm -Rf /usr/local/tomcat/webapps/ROOT
COPY ${WAR_FILE} /usr/local/tomcat/webapps/ROOT.war

 

도커 이미지를 만들기 위해 해당 Dockerfile이 위치한 폴더로 가서 터미널에 접근합니다.

터미널이 깔려있지 않은 분들은 Powershell에서 해당 위치로 접근하시기 바랍니다.

 

 

"docker build -t {이미지 이름} ." 명령어로 이미지를 만들어야 합니다.

맨 뒤의 "." 의 의미는 현재 위치의 Dockerfile을 통해 이미지를 만들겠다는 뜻입니다.

 

"docker images" 명령어로 만들어진 이미지를 볼 수 있습니다.

 

"docker run {이미지 이름}"해당 이미지를 통해 컨테이너를 실행합니다.

 

거의다 끝났습니다.

컨테이너는 정상적으로 실행되었지만, 톰캣의 포트는 8080입니다.

하지만, 저의 프로젝트 포트는 맨 위의 사진에서 알 수 있듯이 8050입니다.

포트가 일치하지 않기 때문에, 포트 포워딩을 해야합니다.

 

컨테이너 톰캣의 포트를 바꾸기 위해서는 귀찮지만, 컨테이너를 실행하고 나서 바꿔야 합니다.

때문에, 위에서 docker run 명령어를 통해 컨테이너를 실행시켰습니다.

 

"docker ps"를 통해 실행중인 컨테이너의 아이디를 알 수 있습니다.

해당 컨테이너의 아이디는 41dd9530fc1a입니다.

 

해당 컨테이너 아이디를 통해 컨테이너 내부에 접근할 수 있습니다.

"docker exec -t {컨테이너 아이디} sh"입니다.

접근이 완료되면 다음과 같이 쉘에 접근한 모습을 볼 수 있습니다.

컨테이너 내부는 톰캣입니다.

"ls" 명령어를 사용하면 톰캣 내부 파일을 볼 수 있습니다.

 

"cd"명령어로 webapps로 이동하고, " ls"명령어를 통해 파일 구조를 보면 다음과 같습니다.

본인이 만든 war파일 및 압축이 풀린 ROOT 폴더를 볼 수 있습니다.

톰캣은 이 ROOT 폴더를 통해 웹 프로젝트를 실행합니다.

 

포트를 변경하기 위해서는 conf 파일의 server.xml을 변경해야합니다.

때문에, 해당 위치로 움직여 vi를 통해 변경합니다.

 

방향키로 내리다보면 다음과 같은 Connector 태그를 볼 수 있습니다.

키보드 a -> 8080을 8050으로 변경 -> esc -> :wq 순서대로 하여, 8080을 8050으로 변경합니다.

변경이 끝나면 다시 쉘로 나와지는데, exit으로 쉘을 빠져 나갑니다.

컨테이너를 재시작합니다.

 

8050 포트로 접속하면 끝납니다.