Se você é desenvolvedor há algum tempo, com certeza já ouviu, ou falou, a famigerada frase: "Ué, na minha máquina funciona!".
Geralmente ela surge naquele momento crítico em que você compartilha seu projeto com alguém da equipe (ou vai subir pro servidor), a pessoa segue a documentação (às vezes até bem feita), instala as dependências, executa o build… e boom!
Erro.
Na sua máquina está tudo liso. Mas do outro lado da tela, tudo quebra.
O culpado? Nem sempre é o código.
Na maioria das vezes, o vilão está escondido em detalhes sutis: a versão do Java instalada, o Node.js diferente, uma lib do sistema que não está presente, ou até o próprio sistema operacional.
É aqui que entra um dos maiores aliados da consistência no desenvolvimento moderno: o Docker.
O que é Docker (de forma simples)?
Docker é uma plataforma que permite "empacotar" uma aplicação com tudo o que ela precisa para executar: sistema, bibliotecas, dependências, ferramentas, versão específica de runtime, tudo mesmo.
Esse "pacote" é chamado de container. Ele roda de forma isolada, como se fosse uma mini-máquina configurada só para a sua aplicação, e que funciona igualzinha em qualquer lugar.
Por que usar Docker no seu projeto?
- Ambiente padronizado para todos
- Documentação viva
- Facilidade para novos desenvolvedores
- Isolamento real
- Ambiente próximo ao de produção
Não importa se quem vai executar o projeto usa Windows, Linux ou macOS. Com Docker, o ambiente de execução é exatamente o mesmo.
O famoso "na minha máquina funciona" vira "funciona igual em qualquer máquina".
O Dockerfile e docker-compose.yml viram a documentação executável do seu ambiente.
Em vez de dizer "instale o PostgreSQL 13", "instale o Java 8/11/17", "instale o PHP 8.3", você diz: docker-compose up.
Simples, direto, sem margem para erro humano.
Quantas vezes você já perdeu um ou dois dias configurando o ambiente para alguém novo no time?
Com Docker, isso cai para alguns minutos. A pessoa só precisa ter Docker instalado, clonar o repositório e subir os containers.
Você pode ter dois projetos rodando com versões completamente diferentes de uma linguagem ou banco de dados, sem conflitos.
Um usando Node 18, outro executando Python 3.7 com PostgreSQL 9? Sem problema.
Se você sobe sua aplicação em produção usando containers, nada mais justo do que desenvolver e testar no mesmo ambiente.
Menos surpresas, menos bugs de "ambiente".
Mas e o desempenho? Não complica demais?
Essa é uma dúvida legítima. Sim, dependendo do sistema operacional (Windows 😂), o Docker pode consumir mais recursos. Mas nos últimos anos, ele melhorou bastante em desempenho e integração nativa. Graças o suporte de WSL2, que permite instalar o Docker no Ubuntu via WSL, sem precisar do Docker Desktop.
Além disso, com o tempo você percebe que o pequeno custo de performance se paga facilmente pela economia de tempo, confiabilidade e tranquilidade de saber que o projeto vai executar bem onde quer que esteja.
Considerações finais
Docker não é moda. É uma das ferramentas mais poderosas que surgiram para tornar o desenvolvimento mais previsível, colaborativo e escalável.
Se você está cansado de ouvir (ou dizer) "na minha máquina funciona", talvez esteja na hora de subir o seu projeto com docker-compose.yml e entrar de vez no mundo dos containers.
Porque no fim das contas, o que a gente mais quer é isso:
Que funcione. Em todas as máquinas. Sem drama.
Nota final
Docker é uma ferramenta poderosa, mas não é um martelo para todos os pregos.
Projetos que exigem acesso direto a hardware, interfaces gráficas nativas ou virtualização avançada (como emuladores de Android, Arduino, ou dispositivos USB) podem encontrar no Docker mais limitação do que benefício.
E tudo bem.
Isso não é uma falha no seu projeto, é apenas uma questão de usar a tecnologia certa no lugar certo.
Feito!