que ejemplo crear contenedor autocontenidas aplicaciones java tomcat docker spring-boot war

java - crear - docker commit ejemplo



Implementación de la aplicación web Java en Tomcat 8 ejecutándose en el contenedor Docker (4)

Soy bastante nuevo en Tomcat y Docker, por lo que probablemente me falta un Tomcat fundamental en alguna parte de esta pregunta.

Lo que intento hacer es crear un contenedor Docker que ejecute un servicio web SpringBoot Restful que solo devuelva algunos datos estáticos. Todo esto se ejecuta en OSX, así que también estoy usando Boot2Docker.

He escrito mi propio Dockerfile para compilar el contenedor en el que se ejecuta mi aplicación:

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/

Este Dockerfile funciona bien y puedo iniciar el contenedor desde la imagen creada.

docker build -t myapp . docker run -it --rm -p 8888:8080 myapp

Este contenedor se inicia correctamente y no genera errores y muestra el mensaje que dice que mi aplicación se implementó.

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

El contenedor también tiene correctamente copiado myapp.war en la ruta descrita en el Dockerfile. Además, puedo navegar a la página predeterminada de Tomcat para confirmar que Tomcat se está ejecutando, también puedo ver todos los ejemplos, etc.

Al problema, cuando navego a http://192.168.59.103:8888/myapp/getData obtengo un 404. No puedo entender por qué. ¿Me estoy perdiendo algo con respecto a un despliegue .war en Tomcat?


Está intentando copiar el archivo war en un directorio debajo de webapps . El archivo war debe copiarse en el directorio webapps .

Elimine el comando mkdir y copie el archivo war esta manera:

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

Tomcat extraerá la guerra si autodeploy está activado.


Hay una línea para este.

Simplemente puedes correr,

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

Esto copiará el archivo war al directorio webapps y hará que su aplicación se ejecute en poco tiempo.


Puedes probar con esta muestra:

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"]


Tomcat solo extraerá la guerra que se copia al directorio webapps . Cambie Dockerfile siguiente manera:

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

Es posible que deba acceder a la URL como se muestra a continuación, a menos que haya especificado la raíz web

http://192.168.59.103:8888/myapp/getData