Infraestrutura & DevOps

Docker para desenvolvedores: containerize sua aplicação e acabe com o “funciona na minha máquina”

Docker para desenvolvedores: containerize sua aplicação e acabe com o "funciona na minha máquina"

“Funciona na minha máquina” é uma das frases mais temidas no desenvolvimento de software em equipe. A aplicação roda perfeitamente no laptop do desenvolvedor e quebra no servidor de produção, ou no laptop do outro desenvolvedor, por diferenças de versão de linguagem, de biblioteca, de variável de ambiente. Docker resolve esse problema de forma elegante e definitiva: a aplicação roda dentro de um container que inclui tudo que ela precisa — código, runtime, dependências, variáveis de ambiente — e esse container se comporta identicamente em qualquer máquina que tenha Docker instalado.

O conceito fundamental: containers vs VMs

Máquinas virtuais (VMs) emulam hardware completo — cada VM tem seu próprio sistema operacional, o que consome gigabytes de disco e memória. Containers compartilham o kernel do sistema operacional host e isolam apenas o processo e suas dependências. Um container típico ocupa megabytes (não gigabytes), inicia em segundos (não minutos), e você pode rodar dezenas deles simultaneamente em uma máquina comum. Containers são mais leves porque fazem menos — e fazem o suficiente para resolver o problema de isolamento de ambiente.

Dockerfile: a receita do seu container

Um Dockerfile é um arquivo de texto com as instruções para construir uma imagem Docker. Para uma aplicação Node.js, o Dockerfile parte de uma imagem base oficial (FROM node:20-alpine), define o diretório de trabalho, copia os arquivos de dependências, instala as dependências (RUN npm install), copia o código da aplicação, expõe a porta, e define o comando de inicialização (CMD ["node", "index.js"]).

A ordem das instruções no Dockerfile importa para performance de build. Docker usa camadas cacheadas — se você copiar package.json antes do código fonte e instalar as dependências antes de copiar o restante do código, uma mudança no código não invalida o cache da camada de dependências. Downloads de node_modules só acontecem quando package.json muda, não a cada linha de código alterada.

docker-compose: múltiplos serviços, um comando

Aplicações modernas raramente são um único serviço: há o backend (Node.js, Python, Java), o banco de dados (PostgreSQL, MongoDB, Redis), talvez um message broker (RabbitMQ, Kafka). Subir cada um manualmente com docker run com todos os parâmetros corretos é tedioso e propenso a erro. Docker Compose define todos os serviços em um arquivo docker-compose.yml e permite subir toda a infraestrutura com um único comando.

docker compose up -d sobe todos os containers definidos em background. docker compose logs -f backend acompanha os logs do serviço “backend” em tempo real. docker compose down para e remove todos os containers. Para desenvolvimento local, ter um docker-compose.yml no repositório significa que qualquer desenvolvedor consegue rodar a aplicação completa em minutos em uma máquina nova — sem instalar PostgreSQL, sem configurar Redis, sem nenhuma dependência além do Docker.

Volumes e persistência de dados

Por padrão, dados criados dentro de um container são perdidos quando o container é removido. Para banco de dados e outros dados persistentes, use volumes Docker: volumes: - postgres_data:/var/lib/postgresql/data no docker-compose monta um volume persistente que sobrevive a remoção e recriação de containers. O volume existe no host e é montado dentro do container — os dados ficam seguros mesmo que o container seja deletado e recriado.

Dicas práticas para começar

Comece Dockerizando o banco de dados local antes da aplicação — é o caso de uso mais simples e imediato: docker run -d -e POSTGRES_PASSWORD=senha -p 5432:5432 postgres:16 sobe um PostgreSQL completo sem instalar nada. Em seguida, crie um Dockerfile para a sua aplicação e teste localmente. Por último, escreva o docker-compose.yml que une tudo. Essa progressão gradual é menos intimidadora que tentar entender Docker todo de uma vez. Invista um fim de semana nisso — é uma das habilidades de infraestrutura que mais abre portas no mercado de desenvolvimento moderno.

Tem um projeto em mente?

Somos especialistas em transformar ideias em produtos digitais. Apps, sites, automações e IA — vamos construir juntos.

Resposta rápida Orçamento sem compromisso +100 projetos entregues
Compartilhar: