Saltar al contenido principal

cómo dockerizar una aplicación de Spring Boot

un brote que crece en una ballenaun brote que crece en una ballena
Erick_Romero.jpeg
autorIngeniero de Software, EPAM Anywhere

Soy un desarrollador Java con 7+ años de experiencia y altas capacidades en todos los aspectos del ecosistema Java como Spring Boot y GCP y diseñando soluciones para las personas. También soy un amante del código limpio y los algoritmos.

Soy un desarrollador Java con 7+ años de experiencia y altas capacidades en todos los aspectos del ecosistema Java como Spring Boot y GCP y diseñando soluciones para las personas. También soy un amante del código limpio y los algoritmos.

En este tutorial rápido, aprenderemos cómo dockerizar una aplicación de Spring Boot utilizando Docker. Necesitarás:

  • JDK 11 para compilar el proyecto
  • Docker Engine para crear contenedores de Spring Boot
  • Una terminal o consola para ejecutar algunos comandos (Git Bash es opcional)
  • Apache Maven para ejecutar algunos comandos para compilar el proyecto
  • Tu IDE (recomiendo IntelliJ IDEA)

Descarga el repositorio

Para empezar, vamos a descargar mi repositorio preconfigurado en Github con todas las dependencias necesarias para ahorrar tiempo.

encuentra tu trabajo ideal
Solo envíanos tu CV y nuestros reclutadores te contactarán con una opción a la medida
aplica ahora
icono de lupa

Revisa el proyecto

Abre el proyecto descargado en tu IntelliJ IDEA y ejecuta el comando mvn clean compile para comprobar si el proyecto funciona correctamente.

Revisa la aplicación

Comprobaremos si nuestra aplicación de Spring Boot también está funcionando. Ejecutemos el siguiente comando en la terminal interna de IntelliJ or ejecútalo desde tu terminal o Git Bash en Windows:

mvn clean spring-boot:run

curl -v localhost:8080/api/hello

Deberías ver el siguiente mensaje en tu terminal para validar que la aplicación ya se está ejecutando y devolviendo el mensaje adecuado en esta ruta:

Añade la configuración para dockerizar la aplicación de Spring Boot

Ahora es el momento de crear la configuración para deckerizar nuestra aplicación de Spring Boot utilizando Docker.

Solo para aclarar, Docker es una plataforma que combina tu aplicación, sus dependencias e incluso un sistema operativo en una imagen que puede ejecutarse en cualquier plataforma.

Ahora crearemos un Dockerfile de spring boot para agregar todas las configuraciones para dockerizar nuestra aplicación de Spring Boot.

Crea un Dockerfile y añade las siguientes configuraciones (Docker las leerá como un pipeline para aplicarlas):

Ahora explicaré un poco acerca de estos comandos:

  • FROM crea una capa a partir de una imagen base de cualquier versión de Java que se encuentra localmente o en cualquier registro de contenedor. Utilizaremos openjdk:11.
  • VOLUME crea un espacio específico para persistir algunos datos en tu contenedor. La carpeta tmp almacenará información.
  • EXPOSE informa a Docker que el contenedor escucha los puertos de red especificados en tiempo de ejecución. Este es el puerto para acceder al contenedor de Spring Boot y se utilizará para ejecutarlo.
  • ARG define una variable que se puede pasar a la aplicación en tiempo de ejecución. Por ejemplo, pasamos la ubicación del archivo jar final dentro de la carpeta target y lo guardamos en una variable JAR_FILE. También puedes pasar más argumentos como credenciales, claves y variables de entorno con sus valores respectivos.
  • ADD copia nuevos archivos, directorios o URL de archivos remotos desde la fuente y los agrega al sistema de archivos de la imagen en la ruta proporcionada. En nuestro caso, agregamos la aplicación de Spring Boot a la imagen de Docker desde la ruta de origen (la variable JAR_FILE) a un destino llamado app.jar.
  • ENTRYPOINT especifica el comando que Docker utilizará para ejecutar nuestra aplicación. En este caso, se pasará el comando común para ejecutar un archivo jar java -jar <nombre del archivo jar> por lo que en este caso es java -jar app.jar para nuestra opción ENTRYPOINT (recuerda que renombramos el archivo spring-boot-docker.jar a app.jar).

Eso es todo para la configuración.

Generar un archivo .jar

Ahora necesitamos generar nuestro archivo .jar ejecutando el comando mvn install en la terminal de IntelliJ. Esto generará un archivo .jar con todas las clases de nuestra aplicación.

Cuando el proceso termine, dirígete a la carpeta "target" de tu proyecto y encontrarás el archivo spring-boot-docker.jar.

Construir una imagen de Docker de Spring Boot

Genial, hemos terminado con los preparativos y es hora de construir nuestra imagen usando Docker Engine.

Asegúrate de tener Docker Engine instalado. Para comprobarlo, ejecuta el comando docker ps o docker info en la pantalla de la terminal. Si no se encuentra el comando, es posible que primero necesites instalar Docker. En este caso, sigue este enlace y encuentra el instalador para tu sistema operativo.

Ejecuta tu Docker Engine. Encuentra la carpeta con el Dockerfile de tu proyecto Spring Boot en la terminal y ejecuta el siguiente comando (asegúrate de finalizar el comando con un espacio y un punto):

docker build -t spring-boot-docker:spring-docker .

El comando "build" construirá una imagen de acuerdo con las instrucciones que pasamos al Dockerfile, y la bandera -t se utiliza para agregar una etiqueta a nuestra imagen.

En unos minutos verás que la imagen se creó correctamente:

Ejecuta el comando docker image ls para verificar si la imagen existe. Deberías poder ver tu imagen en el repositorio.

Ejecuta la imagen Spring Boot Docker en un contenedor

Ahora ejecutaremos nuestra imagen en un contenedor, pero primero nos aseguraremos de no obtener un error intentando apuntar nuestro puerto de contenedor con el de localhost.

Ejecuta el siguiente comando:

docker run -p 8080:8080 spring-boot-docker:spring-docker .

Puedes agregar la bandera -d antes de -p para evitar ver cualquier registro de logs y ejecuta el contenedor en segundo plano.

La bandera -p crea una regla de firewall que mapea el puerto de contenedor previamente expuesto :8080 al puerto :8080 de tu máquina.

Si todo está hecho correctamente, nuestro contenedor debería estar en ejecución.

Luego ejecuta el comando curl -v localhost:8080/api/hello en tu terminal para probar si podemos acceder al endpoint de la aplicación.

Debes ver la misma respuesta que al principio del tutorial.

¡Eso es todo! Espero que hayas aprendido cómo dockerizar una aplicación Spring Boot.

Si estás interesado en unirte a EPAM Anywhere, no dudes en buscar nuestras ofertas de trabajo de desarrollador Java remoto y aplicar.

Happy coding!

actualizado 24 Feb 2024
Erick_Romero.jpeg
autorIngeniero de Software, EPAM Anywhere

Soy un desarrollador Java con 7+ años de experiencia y altas capacidades en todos los aspectos del ecosistema Java como Spring Boot y GCP y diseñando soluciones para las personas. También soy un amante del código limpio y los algoritmos.

Soy un desarrollador Java con 7+ años de experiencia y altas capacidades en todos los aspectos del ecosistema Java como Spring Boot y GCP y diseñando soluciones para las personas. También soy un amante del código limpio y los algoritmos.