Deploying a REST API with Spring Boot and Docker

Software development

El desarrollo de APIs REST es una práctica habitual en proyectos backend modernos. Spring Boot facilita enormemente esta tarea, ofreciendo una estructura clara, integración con librerías populares y soporte para perfiles de entorno. En este artículo aprenderás a crear una API REST sencilla con Spring Boot y desplegarla usando Docker. Este enfoque garantiza portabilidad, repetibilidad y facilidad de despliegue en cualquier entorno.

1. Crear el proyecto con Spring Boot

Puedes usar Spring Initializr para generar la estructura básica. Selecciona:

  • Project: Maven
  • Language: Java
  • Dependencies: Spring Web, Spring Data JPA, PostgreSQL Driver

Una vez generado el proyecto, añade una entidad y un controlador REST básico:

@Entity
public class Task {
    @Id @GeneratedValue
    private Long id;
    private String title;
    private boolean completed;
    // getters y setters
}

@RestController
@RequestMapping("/tasks")
public class TaskController {
    @Autowired
    private TaskRepository repository;

    @GetMapping
    public List<Task> getAll() {
        return repository.findAll();
    }
}

2. Configurar Docker

Para contenerizar la aplicación, crea un Dockerfile:

FROM openjdk:17-jdk-slim
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

Y un docker-compose.yml para levantar la app y PostgreSQL:

version: '3.8'
services:
  db:
    image: postgres:15
    environment:
      POSTGRES_DB: tasks
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
    ports:
      - "5432:5432"
  app:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - db
    environment:
      SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/tasks
      SPRING_DATASOURCE_USERNAME: user
      SPRING_DATASOURCE_PASSWORD: pass

3. Probar el entorno local

Ejecuta docker-compose up --build. Accede a http://localhost:8080/tasks para probar el endpoint. Puedes usar Postman either curl para hacer peticiones GET, POST, etc.

4. Consideraciones para producción

  • Usa perfiles application-dev.yml and application-prod.yml
  • Configura Flyway para la gestión de esquemas
  • Agrega logging estructurado y gestión de errores global
  • Usa imágenes base más ligeras (Alpine)

Con esta configuración tienes un entorno de desarrollo y despliegue básico listo para crecer.

Share
Facebook
Twitter
E-mail
Print