Aula 15 - Docker e Deploy 🐳
Na penúltima aula, vamos aprender a empacotar nossa API para rodar em qualquer ambiente e publicá-la em produção usando Docker.
😊 O Problema: "Na Minha Máquina Funciona"
Diferenças entre ambientes (versão do Java, do banco de dados, configurações de sistema operacional) são uma fonte clássica de bugs difíceis de rastrear. O Docker resolve isso empacotando a aplicação com tudo que ela precisa para rodar.
🧠 Containerizando a Aplicação Spring Boot
Um Dockerfile descreve como construir a imagem da sua aplicação:
FROM eclipse-temurin:17-jre
WORKDIR /app
COPY target/backend-0.0.1.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
📊 Do Código ao Container
graph LR
A[Código Fonte] -- "mvn package" --> B[arquivo .jar]
B -- "docker build" --> C[Imagem Docker]
C -- "docker run" --> D[Container rodando] 💻 Construindo e Rodando o Container
$ mvn clean package
$ docker build -t minha-api .
$ docker run -p 8080:8080 minha-api
$ Started BackendApplication in 2.3 seconds
🧠 Orquestrando com Docker Compose
Aplicações reais geralmente precisam de mais de um container (a API + o banco de dados). O Docker Compose orquestra vários containers juntos:
services:
api:
build: .
ports:
- "8080:8080"
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: senha
Important
depends_on garante que o container do banco de dados suba antes do container da API tentar se conectar a ele.
🧠 Variáveis de Ambiente e Segredos
Caution
Nunca coloque senhas de banco ou chaves secretas (como a chave do JWT) diretamente no código ou na imagem Docker. Use variáveis de ambiente, injetadas em tempo de execução.
📝 Exercícios Progressivos
- Básico: Qual problema o Docker resolve em relação a diferenças entre ambientes?
- Básico: O que é um
Dockerfile? - Intermediário: Para que serve o Docker Compose, em vez de rodar cada container manualmente?
- Intermediário: Por que não devemos colocar a senha do banco de dados diretamente no
Dockerfile? - Desafio: Adicione um serviço de
pgadminaodocker-compose.ymlpara gerenciar visualmente o banco PostgreSQL.
🚀 Mini-projeto: Crie o Dockerfile da sua API e um docker-compose.yml que suba a API junto com um banco PostgreSQL, tudo com um único comando docker compose up.