Docker es una tecnología fabulosa que nos permite llevar de la mano software e infraestructura. Cuando pensamos en Java y la JVM siempre nos viene a la mente una de las características que lo ha hecho más popular que es: cross-platform.

Lo cierto es que este concepto es muy relativo … pues sí. Recientemente estuve trabajando en un proyecto en mi local con Java 11 y cuando fui a producción lo que teníamos era Java 8, resulta que tuve que hacer cambios en Optional (Java 8 vs Java 11). Algo similar me paso con String, en Java 11 pusieron isBlank, que no está en Java 8. Esto no es una crítica a Java, es un símbolo de evolución, malo sería que hacia adelante no funcionara.

El punto al que quiero llegar, es que sino seguimos unas pautas para desarrollar en ambientes homogeneos a los de producción pueden llegar a surgir algunos problemas,”o no”.

Para que no tengamos el problema: docker

Como referí en la introducción docker permite llevar de la mano el software y la infraestructura, entiéndase por esto último para un proyecto Java (el sistema operativo base + JDK + app).

Para dockerizar un proyecto Spring Boot, o Java con servidor de aplicaciones autocontenido solo basta con las siguientes líneas agregadas en fichero de nombre Dockerfile. La ruta de la variable JAR_FILE es relativa a donde está el Dockerfile.

FROM openjdk:8-jdk-alpine
VOLUME /tmp
EXPOSE 8080
ARG JAR_FILE=target/dockerbasico-0.0.1-SNAPSHOT.jar
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

La primera línea nos da un sistema operativo Linux Alpine basado en busybox (muy poco size) y ese Linux ya viene con JDK 8. Las siguientes líneas lo que hacen es ponerle arriba nuestra app Spring Boot que la buscamos en la carpeta /target.

Al final para construir nuestra imagen de docker, solo nos basta con ejecutar:

docker build -t midocker .

El . es porque lo hacemos parados en donde está el fichero Dockerfile y midocker es el nombre que le vamos a poner al contenedor.

Ese contenedor creado lo podemos colocar en un registry o llevar a cualquier lugar para ponerlo en producción, sin preocupación alguna del sistema operativo o infraestructura donde se va a ejecutar.

Si quieres ver el ejemplo completo puedes visitar GitHub.

En este vídeo de acá te explicamos todos los conceptos y pasos más detallados.

Espero te se útil este artículo.

1 thought on “Dockerizando una app Spring Boot

Comments are closed.