Dockerizar jar

Creamos un dockerfile

# Utiliza una imagen base de Java
FROM eclipse-temurin:21-jdk-alpine

# Crea un directorio dentro del contenedor para la aplicación
WORKDIR /app

# Copia el archivo JAR de tu aplicación al contenedor
COPY SpringBoot01.jar /app/SpringBoot01.jar

# Expone el puerto en el que se ejecutará la aplicación (puedes ajustarlo si es diferente)
EXPOSE 8080

# Comando para ejecutar el JAR
ENTRYPOINT ["java", "-jar", "/app/SpringBoot01.jar"]

Copiamos el arhivo .jar de nuestra aplicación (lo tenemos en target) a la raiz de nuestro proyecto. Aprovechad para cambiarle el nombre por otro un poco más amigable.

Tened cuidado con:
– La versión del Java
– El nombre de vuestro archivo

Construimos la imagen docker:

docker build -t SpringBoot01 .

La tendremos en nuestro docker desktop

La ejecutamos mapeando el puerto 8080 al puerto que queramos (el mismo 8080, por ejemplo). Si vamos a nuestro navegador deberíamos poder acceder como antes. Tened cuidado de no tener otro SpringBoot activo que nos pise los puertos.

Crear ejecutable jar

Por consola:

mvnw clean package

Dentro de la carpeta del proyecto

En Eclipse:

Botón derecho -> run as -> Maven install

o

Botón derecho -> run as -> Maven build

Y poner package en ‘goal’

El archivo lo crea dentro de la carpeta /target

Para ejecutarlo vamos a la consola y ponemos

java -jar nombre-del-archivo.jar

 

 

Ejemplo imagen docker


# Utilizar una imagen base de Ubuntu
FROM ubuntu:20.04

# Establecer el directorio de trabajo
WORKDIR /usr/share/nginx/html

# Instalar Nginx
RUN apt-get update && apt-get install -y nginx

# Copiar un archivo HTML personalizado al contenedor
COPY index.html /var/www/html/index.html

# Exponer el puerto 80
EXPOSE 80

# Iniciar Nginx
CMD ["nginx", "-g", "daemon off;"]
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Hola que tal</h1>
</body>
</html>

Problemas de CORS

Si al acceder a la API desde JS tenemos problemas de CORS (orígenes cruzados de datos) se debe a que las direcciones tipo localhost suelen estar bloqueadas por los navegadores. Para solucionar esto debemos usar la anotacion @CrossOrigin. Simplemente poniendo esa anotación debería permitir el acceso desde cualquier origen.

Aquí tenéis algunos ejemplos:

https://spring.io/guides/gs/rest-service-cors

https://howtodoinjava.com/spring-boot2/spring-cors-configuration/

Proyecto final

El proyecto final consiste en crear una aplicación que se componga de dos partes:

1.- Backend

Hay que desarrollar una API Rest con Spring Boot que nos permita realizar el mantenimiento (CRUD) de una base de datos de como mínimo tres tablas relacionadas.

2.- FrontEnd

Hay que desarrollar una web con HTML, CSS y JS que tenga un estilo atractivo y que consuma algún elemento de la API

Un ejemplo

Tengo mi biblioteca que tiene las siguientes tablas:

Género 1–N Libro N–N Autor

Mi Api REST me permite hacer el mantenimiento (CRUD) de géneros, libros y autores con los verbos estándar del REST (GET, POST, PUT y DELETE). También me tendría que poder asignar un libro a un autor y viceversa.

Mi página web podría tener, por ejemplo, una cabecera con una imagen de libros y un menú para ver el listado de los géneros que tengo y pinchando en uno de esos géneros me salieran los libros que son de ese género.

Un proyecto como el anterior sería lo mínimo a entregar. Después se puede complicar, podemos poner vistas en el Backend, búsquedas en el front, y cualquier cosa que se nos ocurra.

¿Qué tenemos que ir entregando?

1.- Una descripción del proyecto

2.- El modelo E-R de la base de datos (no la base de datos)

3.- Un esquema de lo que tendrá el frontend

Una vez validado por mí arrancamos el proyecto y al finalizarlo hay que entregar el código fuente y un volcado de la base de datos. Si alguien lo quiere subir a Github como vimos antes del verano, estupendo.