Introdução
Quando comecei a estudar containerização de aplicações Java, uma coisa ficou muito clara:
o maior ganho não é apenas empacotar aplicações, mas transformar o ambiente inteiro em código.
Neste artigo, vou mostrar 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.
Tudo o que você precisa é Docker ou Podman.
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.
Exemplo prático: Spring Boot + PostgreSQL
Dockerfile da aplicação Spring Boot
O Dockerfile define como a aplicação Java será executada:
FROM eclipse-temurin:17-jdk
WORKDIR /app
COPY target/app.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]
O código está dizendo:
- Qual versão do Java usar
- Onde a aplicação ficará dentro do container
- Como ela será iniciada
docker-compose.yml
Agora descrevemos toda a infraestrutura local:
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
Nesse arquivo yml definimos:
- Um container para o PostgreSQL
- Um container para a aplicação Spring Boot
- Variáveis de ambiente
- Comunicação entre os serviços
Subindo tudo com um único comando:
docker compose up
E pronto:
✅ Spring Boot rodando
✅ PostgreSQL configurado
✅ Rede criada automaticamente
✅ Ambiente igual em qualquer máquina
Por que isso é tão poderoso?
Porque muda completamente a forma de desenvolver software:
- Ambiente deixa de ser um problema
- Onboarding de novos desenvolvedores fica simples
- Pipelines de CI/CD ficam previsíveis
- Infraestrutura vira código versionável
Containerização não é só sobre Docker.
É sobre confiabilidade, portabilidade e padronização.
Conclusão
Quando você percebe que um projeto inteiro pode ser descrito em arquivos, o desenvolvimento muda de nível.
Esse modelo é a base para:
- Microsserviços
- Kubernetes
- Arquiteturas modernas em cloud
- Entrega contínua
E tudo começa com um Dockerfile e um docker-compose.