Blog /carreira

Da faculdade ao primeiro sistema em produção: O guia de sobrevivência com Docker

Se seu projeto só funciona na sua máquina, não é um sistema — é um hobby. Veja como o Docker Compose te dá confiança para o deploy real.

TL;DR: Se o seu projeto só funciona na sua máquina, ele não é um sistema, é um hobby. Aprenda como o Docker Compose tira o peso das suas costas e te dá confiança para o deploy real.

O mito do "na minha máquina funciona"

Todo mundo que passou por ADS tem aquele projeto guardado no peito. O meu era uma API em Java com Spring Boot e PostgreSQL. No meu computador, era lindo.

A realidade bateu na porta quando:

  • O banco não subiu no notebook do professor durante a banca.
  • O cliente tentou rodar e a porta 5432 já estava ocupada.
  • Levei 40 minutos para "ajudar" um colega a configurar o ambiente.

Verdade do mercado em 2026: Ninguém tem tempo para configurar ambiente. Se o seu projeto não sobe com um comando, ele é um custo, não uma solução. Foi aqui que o Docker deixou de ser "hype" e virou minha ferramenta de sobrevivência.


O Dockerfile: Sua aplicação em uma caixa

O objetivo é simples: empacotar o ambiente. Não importa se o servidor tem Java 17, 21 ou se é Linux ou Windows.

# Otimizado para imagens leves
FROM eclipse-temurin:17-jdk-alpine
WORKDIR /app
# Dica: O jar deve ser gerado pelo CI/CD ou via script de build
COPY target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

O que aprendi na marra: O primeiro Dockerfile a gente nunca esquece, mas o segredo não está na imagem da aplicação, e sim em como ela conversa com o resto.


Docker Compose: Onde o jogo vira

API sozinha não faz nada. Você precisa de banco, talvez um Redis ou um frontend em Vue.js. O compose.yml é o seu manual de instruções automatizado.

O Setup "Pronto para Guerra":

services:
  app:
    build: .
    ports:
      - "8080:8080"
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - DATABASE_URL=jdbc:postgresql://db:5432/vincens_db
    depends_on:
      db:
        condition: service_healthy

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: vincens_db
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 5

Dica de Ouro: O healthcheck é a diferença entre um sistema que sobe e um que dá erro de conexão porque a API tentou falar com o banco antes dele estar "vivo".


A Realidade Crua: O que a faculdade não te conta

Depois de colocar sistemas reais no ar (e passar algumas noites em claro), aqui estão os "Logs de Execução" que você precisa anotar:

Segurança não é opcional: Jamais, em hipótese alguma, suba o arquivo .env para o Git. Crie um .env.example com as chaves vazias. Em 2026, robôs varrem o GitHub em segundos atrás de credenciais de banco.

Logs são seus olhos: System.out.println é amadorismo. Use Logback ou SLF4J. Em produção, você não tem interface, você tem texto. Se o log for ruim, você está cego às 2h da manhã.

Persistência vs. Backup: Rodar banco em Docker é prático para dev. Em produção? Prefira serviços gerenciados (como Cloud SQL no GCP) ou tenha um script de backup automático fora do container. Volume não é backup.


VPS ou Cloud? Onde fazer o deploy

Para quem está começando agora e quer ver o sistema rodando:

PaaS (Railway/Render): Aperta um botão, conecta o GitHub e pronto. Muito bom para ter a sensação "UAU, FIZ UM DEPLOY!"

VPS (Hetzner/DigitalOcean): Controle total. Você instala o Docker e o Compose, faz o git pull e sobe tudo manualmente. É mais barato, mas a responsabilidade do firewall e segurança é sua.


Conclusão: Feito é melhor que perfeito

Meu primeiro trabalho real não tinha Docker. Não tinha Compose. Não tinha nada disso.

Era uma landing page para um negócio local — HTML, CSS, JavaScript puro. Sem framework, sem biblioteca, sem abstração. O "backend" era um Google Apps Script que capturava o formulário de contato e mandava um e-mail para o dono do negócio. Tinha Google Maps embedado para o cliente aparecer nas buscas locais. SEO configurado na mão, tag por tag.

Parecia simples demais para chamar de sistema. Mas estava no ar. O dono do negócio recebia os contatos dos clientes no e-mail. Era real.

Aprendi mais naquele projeto do que em meses de aula — porque o erro era meu, o cliente era real, e o prazo não esperava.

Docker Compose veio depois, quando os projetos cresceram e "funciona na minha máquina" virou um custo que eu não podia mais pagar. Ele foi o que me deu a segurança para entregar ambientes consistentes sem depender da sorte.

Se você está começando, não espere ter a stack perfeita. Entregue o que você sabe fazer hoje — com Google Apps Script, com VPS barata, com o que tiver. O perfeccionismo é o deploy que nunca sai.


Se você está no início, relaxa... depois só piora.

Gostou do artigo?

Newsletter

Em breve

Em breve você poderá receber novos artigos direto no seu email.