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