
Era terça-feira, início da sprint, e eu precisava dar manutenção em um projeto legado. O problema? Ele rodava com Node.js 14. Meu computador tinha Node.js 20 instalado para outros projetos.
Tentei usar o nvm (Node Version Manager) para alternar as versões. Funcionou... até eu precisar rodar dois projetos ao mesmo tempo: o legado na versão 14 e o novo na versão 20.
Resultado: 2 horas perdidas entre conflitos de dependências, variáveis de ambiente bagunçadas e um belo "module not found" que me fez questionar todas as minhas escolhas de carreira.
Foi aí que o Docker entrou em cena.
Nota: A história contada acima é fictícia e foi criada apenas para se ter um entendimento melhor do assunto de forma prática.
O Problema em Poucas Linhas
Dois projetos. Duas versões de Node. Uma máquina.
Sem Docker, a solução envolvia ficar alternando versões o tempo todo, ou subir uma máquina virtual pesada apenas para isolar um ambiente.
Com Docker, a lógica mudou completamente: cada projeto carrega seu próprio ambiente, sem poluir minha máquina.
A Solução em 3 Passos
1. Criar o Dockerfile
Na raiz do projeto legado (Node 14), criei esse arquivo:
FROM node:14-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
2. Criar o Docker Compose
Criei um arquivo docker-compose.yml na raiz do projeto:
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
- /app/node_modules
3. Rodar o Projeto
Com apenas um comando, o Docker sobe o ambiente isolado:
docker-compose up --build
O Resultado
Em menos de 5 minutos, eu tinha um ambiente de desenvolvimento isolado, com a versão exata do Node.js que o projeto precisava, sem conflitar com o resto do meu sistema.
O melhor de tudo: quando o projeto acabou, bastou um docker-compose down para remover tudo, sem deixar rastros.