“Adeus ‘funciona na minha máquina’: Spring Boot com PostgreSQL usando Docker”
Source: Dev.to
Introdução
Quando comecei a estudar containerização de aplicações Java, ficou claro que o maior ganho não é apenas empacotar a aplicação, mas transformar todo o ambiente em código. Neste artigo, mostro como dois arquivos são suficientes para subir uma aplicação Spring Boot + PostgreSQL, sem precisar instalar Java, banco de dados ou servidor de aplicação localmente.
O problema clássico no desenvolvimento backend
Quem trabalha com backend já enfrentou, pelo menos, um desses cenários:
- “Funciona na minha máquina”
- Versões diferentes de Java entre ambientes
- Banco configurado manualmente
- Setup longo para novos membros do time
A containerização resolve exatamente isso: o ambiente passa a ser reproduzível e versionável.
Dockerfile
# Dockerfile
FROM eclipse-temurin:17-jdk
WORKDIR /app
COPY target/app.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]
O Dockerfile define:
- Qual versão do Java usar (
eclipse-temurin:17-jdk); - Onde a aplicação ficará dentro do container (
/app); - Como ela será iniciada (
java -jar app.jar).
docker‑compose.yml
# docker-compose.yml
version: "3.8"
services:
db:
image: postgres:15
environment:
POSTGRES_DB: appdb
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
ports:
- "5432:5432"
app:
build: .
ports:
- "8080:8080"
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/appdb
SPRING_DATASOURCE_USERNAME: user
SPRING_DATASOURCE_PASSWORD: pass
depends_on:
- db
Neste arquivo definimos:
- Um container para o PostgreSQL;
- Um container para a aplicação Spring Boot;
- Variáveis de ambiente necessárias para a conexão;
- Comunicação entre os serviços (
appdepende dedb).
Para subir tudo com um único comando:
docker compose up
Benefícios
- O ambiente deixa de ser um problema de configuração.
- Onboarding de novos desenvolvedores torna‑se simples.
- Pipelines de CI/CD ficam previsíveis.
- Infraestrutura vira código versionável.
Containerização não é só sobre Docker; trata‑se de confiabilidade, portabilidade e padronização. Quando um projeto inteiro pode ser descrito em arquivos, o desenvolvimento muda de nível. Esse modelo serve de base para:
- Microsserviços
- Kubernetes
- Arquiteturas modernas em cloud
- Entrega contínua
E tudo começa com um Dockerfile e um docker-compose.yml.