development

Docker 컨테이너에서 실행되는 Tomcat 8에 Java webapp 배포

big-blog 2021. 1. 7. 20:37
반응형

Docker 컨테이너에서 실행되는 Tomcat 8에 Java webapp 배포


나는 Tomcat과 Docker를 처음 접했기 때문에 아마도이 질문에서 Tomcat 기본 사항이 누락되었을 것입니다.

내가하려는 것은 정적 데이터를 반환하는 SpringBoot Restful 웹 서비스를 실행하는 Docker 컨테이너를 빌드하는 것입니다. 이것은 모두 OSX에서 실행되므로 Boot2Docker도 사용하고 있습니다.

내 앱이 실행되는 컨테이너를 빌드하기 위해 고유 한 Dockerfile을 작성했습니다.

FROM tomcat:8.0.20-jre8

RUN mkdir /usr/local/tomcat/webapps/myapp

COPY /1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/myapp/

이 Dockerfile은 잘 작동하며 생성 된 이미지에서 컨테이너를 시작할 수 있습니다.

docker build -t myapp .

docker run -it --rm -p 8888:8080 myapp

이 컨테이너는 올바르게 시작되고 오류를 출력하지 않고 내 앱이 배포되었다는 메시지를 표시합니다.

22-Mar-2015 23:07:21.217 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 
Deploying web application directory /usr/local/tomcat/webapps/myapp

컨테이너에는 Dockerfile에 설명 된 경로에 복사 된 myapp.war도 올바르게 있습니다. 또한 Tomcat 기본 페이지로 이동하여 Tomcat이 실행 중인지 확인할 수 있으며 모든 예제를 실행할 수도 있습니다.

문제에 대해 http://192.168.59.103:8888/myapp/getData로 이동 하면 404가 표시됩니다. 이유를 알 수 없습니다. Tomcat에 .war 배포와 관련하여 누락 된 것이 있습니까?


war아래 디렉토리에 파일 을 복사하려고 합니다 webapps. war 파일은 webapps디렉토리에 복사해야합니다 .

mkdir 명령을 제거하고 war다음과 같이 파일을 복사합니다 .

COPY /1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/myapp.war

톰캣 autodeploy이 켜져 있으면 전쟁을 추출합니다 .


이것에 대한 oneliner가 있습니다.

간단히 실행할 수 있습니다.

docker run -v /1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.war:/usr/local/tomcat/webapps/myapp.war -it -p 8080:8080 tomcat

그러면 war 파일이 webapps 디렉토리에 복사되고 앱이 즉시 실행됩니다.


Tomcat은 webapps디렉토리에 복사 된 전쟁 만 추출합니다 . Dockerfile아래와 같이 변경 :

FROM tomcat:8.0.20-jre8
COPY /1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/myapp.war

webroot를 지정하지 않은 경우 아래와 같이 URL에 액세스해야 할 수 있습니다.

http://192.168.59.103:8888/myapp/getData


이 샘플을 사용해 볼 수 있습니다.

FROM tomcat:9.0.11-jre10

MAINTAINER saravit

RUN rm -rf /usr/local/tomcat/webapps/*

COPY ./ROOT.war /usr/local/tomcat/webapps/ROOT.war

CMD ["catalina.sh","run"]

참조 URL : https://stackoverflow.com/questions/29201262/deploying-java-webapp-to-tomcat-8-running-in-docker-container

반응형