Recordemos, Docker permite:
- Crear contenedores, que incluyen no solo tu aplicación, sino también todas sus dependencias.
- Garantizar la portabilidad, ya que el contenedor funciona igual en cualquier sitio.
- Aislar las aplicaciones unas de otras.
- Facilitar el despliegue en la nube, en servidores o incluso en tu portátil local.
¿Listos? ¡Pues empezamos!
Estructura del proyecto
Antes que nada, asegúrate de que tienes una aplicación Spring Boot lista que genere un archivo jar mediante Maven. Por ejemplo, la estructura de tu proyecto puede verse así:
my-spring-boot-app/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com.example.demo/
│ │ │ ├── DemoApplication.java
│ │ │ └── controllers/
│ │ │ └── HelloController.java
│ │ └── resources/
│ │ └── application.properties
├── pom.xml
├── target/
│ └── my-spring-boot-app-0.0.1-SNAPSHOT.jar
└── Dockerfile
El archivo Dockerfile lo crearemos hoy.
Paso 1: Crear el Dockerfile
Dockerfile — es la "receta" para construir la imagen Docker. Abre tu proyecto y crea un nuevo archivo llamado Dockerfile en la carpeta raíz.
Ejemplo mínimo de Dockerfile
# Usamos una imagen base con Java instalado
FROM openjdk:17-jdk-slim
# Indicamos el directorio de trabajo dentro del contenedor
WORKDIR /app
# Copiamos el archivo jar de la aplicación al contenedor
COPY target/my-spring-boot-app-0.0.1-SNAPSHOT.jar app.jar
# Indicamos el comando para ejecutar la aplicación
ENTRYPOINT ["java", "-jar", "app.jar"]
FROM openjdk:17-jdk-slim
Indica la imagen base para el contenedor. Es una imagen ligera con Java 17.WORKDIR /app
Establece el directorio de trabajo dentro del contenedor, desde el que se ejecutará la aplicación.COPY target/my-spring-boot-app-0.0.1-SNAPSHOT.jar app.jar
Copia el archivoapp.jardesde la carpeta localtargetal directorio/appdel contenedor.ENTRYPOINT ["java", "-jar", "app.jar"]
Indica el comando que se ejecuta al iniciar el contenedor.
Paso 2: Construir la imagen Docker
Ahora que el Dockerfile está listo, puedes construir la imagen Docker. Ejecuta los siguientes comandos en la terminal:
# Ve a la carpeta del proyecto
cd /path/to/my-spring-boot-app
# Compila el archivo jar, si aún no lo tienes
mvn clean package
# Construye la imagen Docker
docker build -t my-spring-boot-app:latest .
docker build
Comando para construir la imagen Docker.-t my-spring-boot-app:latest
Indica el nombre (tag) para la imagen creada. Aquí es "my-spring-boot-app", versión "latest"..
Indica el directorio donde está elDockerfile.
Paso 3: Ejecutar el contenedor Docker
Después de construir la imagen puedes ejecutarla como contenedor:
docker run -d -p 8080:8080 --name spring-app my-spring-boot-app:latest
-d
Ejecuta el contenedor en segundo plano (detached mode).-p 8080:8080
Mapea el puerto 8080 del host al puerto 8080 del contenedor.--name spring-app
Asigna un nombre al contenedor.my-spring-boot-app:latest
Especifica la imagen Docker que se va a usar.
Ahora tu aplicación está disponible en http://localhost:8080.
Paso 4: Verificar que el contenedor funciona
Para asegurarte de que el contenedor está funcionando, ejecuta estos comandos:
# Comprueba los contenedores en ejecución
docker ps
# Mira los logs de la aplicación
docker logs spring-app
Deberías ver los logs del funcionamiento de tu aplicación Spring Boot.
Consejos y errores comunes
- Si el archivo jar no se genera, asegúrate de haber compilado el proyecto correctamente con Maven (
mvn clean package). - Si la imagen Docker no se construye, revisa que las rutas en el
Dockerfileestén correctas. - Si la aplicación dentro del contenedor no arranca, revisa los logs con
docker logs spring-app.
Ajustes adicionales del Dockerfile
1. Definir variables de entorno
Puedes pasar variables al contenedor:
ENV SERVER_PORT=8080
ENTRYPOINT ["java", "-jar", "app.jar", "--server.port=${SERVER_PORT}"]
Ahora puedes indicar el puerto al ejecutar el contenedor:
docker run -d -p 9090:9090 -e SERVER_PORT=9090 my-spring-boot-app:latest
2. Reducir el tamaño de la imagen Docker
Las imágenes ligeras ayudan a ahorrar espacio. En lugar de la imagen openjdk usa distroless:
FROM gcr.io/distroless/java:17
COPY target/my-spring-boot-app-0.0.1-SNAPSHOT.jar app.jar
CMD ["app.jar"]
¿Qué sigue?
Con Docker tus aplicaciones pueden funcionar igual en tu portátil de desarrollo, en un servidor o en la nube. En el siguiente paso aprenderemos a subir imágenes Docker a repositorios en la nube y desplegarlas en plataformas como AWS o Kubernetes!
GO TO FULL VERSION