Integración de Spring Boot con Docker: de cero a producción
En el desarrollo backend moderno, ya no basta con que una aplicación funcione en tu máquina.
Hoy, es indispensable que las soluciones puedan desplegarse de forma rápida, consistente y escalable, sin importar si se ejecutan en tu ordenador, un servidor local o en la nube. Aquí es donde la combinación de Spring Boot y Docker se vuelve especialmente útil.
Este artículo muestra cómo empaquetar tu aplicación Spring Boot en un contenedor Docker, cómo orquestarla con docker-compose
y qué buenas prácticas debes considerar para llevarla a producción con confianza.

¿Por qué Docker junto a Spring Boot?
Spring Boot ofrece una plataforma sólida para construir servicios backend. Pero cuando se trata de empaquetar, desplegar y escalar aplicaciones, surgen los desafíos habituales: entornos inconsistentes, configuraciones difíciles de replicar, dependencias que fallan según el entorno.
Docker permite encapsular tu aplicación en un contenedor autocontenible que se comporta de la misma forma en cualquier sistema. Junto a Spring Boot, esta combinación resuelve los problemas habituales del despliegue tradicional, facilitando la entrega continua y la operación estable en cualquier entorno.
1. Preparar tu aplicación Spring Boot
Supongamos que tienes una aplicación backend con Spring Boot, por ejemplo una API REST para gestión de tareas. La estructura básica del proyecto es la siguiente:
/mi-app├── src/├── pom.xml
Usando Maven o Gradle, compila tu aplicación para generar un archivo .jar
ejecutable. Con Maven:
./mvnw clean package
Esto generará un archivo como target/mi-app-0.0.1-SNAPSHOT.jar
, que contiene todo lo necesario para ejecutar la app.
2. Crear el Dockerfile
El Dockerfile
define los pasos para construir la imagen que contendrá tu aplicación. Un ejemplo funcional y eficiente podría verse así:
eclipse-temurin:17-jdk-alpineWORKDIR /appCOPY target/mi-app-0.0.1-SNAPSHOT.jar app.jarENTRYPOINT ["java", "-jar", "app.jar"]
Esta configuración usa una imagen base, copia tu .jar
compilado, y establece el comando de ejecución. Es una base estable y segura para producción.
Construir la imagen y ejecutar el contenedor
Desde la raíz del proyecto, construye la imagen:
docker build -t miapp-springboot .
Y luego ejecútala en el puerto 8080:
docker run -p 8080:8080 miapp-springboot
La aplicación ya está en funcionamiento dentro de un contenedor, aislada de tu sistema operativo, con el entorno exacto que definiste en la imagen.
Orquestar servicios con Docker Compose
En aplicaciones reales, es común depender de otros servicios como bases de datos. docker-compose
permite levantar múltiples contenedores con una sola instrucción.
Un archivo docker-compose.yml
típico para una app con PostgreSQL puede verse así:
'3.8' services:app:build: .ports:- "8080:8080"depends_on:- dbenvironment:- SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/mydb- SPRING_DATASOURCE_USERNAME=postgres- SPRING_DATASOURCE_PASSWORD=secretdb:image: postgres:15environment:POSTGRES_DB: mydbPOSTGRES_USER: postgresPOSTGRES_PASSWORD: secretvolumes:- dbdata:/var/lib/postgresql/datavolumes:dbdata:
Con este archivo, levantar tu entorno completo es tan simple como:
docker-compose up --build
Ideal para desarrollo local, pruebas de integración y flujos CI.
Recomendaciones para entornos productivos
Contenerizar una aplicación es solo el primer paso. Para que tu servicio esté listo para producción, conviene aplicar varias buenas prácticas:
Optimizar la imagen
Usa imágenes livianas como Alpine o distroless. Evita instalar herramientas innecesarias. Escanea tus imágenes regularmente con herramientas como Trivy.
Separar configuración del código
Nunca incluyas credenciales en el repositorio ni en el Dockerfile. Usa variables de entorno y perfiles como application-prod.yml
para ajustar comportamiento según el entorno.
Monitoreo y puntos de salud
Agrega spring-boot-starter-actuator
para exponer métricas, health checks y endpoints de información. Esto facilita la integración con orquestadores como Kubernetes y plataformas de monitoreo.
Automatizar el despliegue
Una vez que la imagen está lista, puedes publicarla en un container registry y automatizar el despliegue mediante pipelines CI/CD. Por ejemplo:
docker tag miapp-springboot registry.miempresa.com/miapp:latestdocker
docker push registry.miempresa.com/miapp:latest
A partir de ahí, puede ser desplegada en servicios como AWS ECS, Google Cloud Run, Azure Container Apps o clústeres Kubernetes.
Para finalizar
Adoptar Docker en proyectos con Spring Boot no es solo una mejora técnica: es un cambio estructural en la forma en que desarrollamos, probamos y desplegamos software. Al encapsular tu aplicación en contenedores, eliminás incertidumbres, ganás portabilidad y abrís la puerta a un ecosistema DevOps más ágil y confiable.
Es una inversión que vale la pena, tanto en proyectos pequeños como en arquitecturas complejas basadas en microservicios. Si tu equipo aún no trabaja con contenedores, empezar con Spring Boot es un punto de partida claro, accesible y de alto impacto.