Desenvolvimento

1 dez, 2017

Docker para desenvolvedores – Que vantagem eu teria com Docker?

Publicidade

Você que é desenvolvedor, assim como eu, com certeza conhece e já deve ter usado essa frase para explicar para o seu gerente o porquê do seu código não estar funcionando: “Mas na minha máquina funciona!”.

Normalmente, isso acontece porque já temos todo o ambiente de desenvolvimento configurado em nossas máquinas. O problema é que, para ambientes de produção/homologação, não temos todas as bibliotecas e programas instalados. Quando replicamos o ambiente de desenvolvimento das nossas máquinas para estas outras máquinas, na maioria dos casos, acabamos esquecendo de alguma coisa (lib, configuração, etc).

“Certo, mas hoje já temos máquinas virtuais com todas as nossas configurações, e replicação e reconstrução não são mais um problema.”

Tem razão. Na última década, o uso de máquinas virtuais aumentou significativamente, justamente porque é fácil, seguro, e resolve esse tipo de problema.

“Então, por que usar Docker?”

Para explicar melhor, vou fazer uma simples analogia. Vou usar um exemplo similar ao que ouvi outro dia, do Rafael Gomes.

Imagine que você é um distribuidor de produtos para o mundo inteiro e faça isso utilizando navios. Antigamente, para fazer a distribuição, só era possível transportar um tipo de produto por navio. Porém, com o passar do tempo, isso se tornou insustentável e a solução foi usar navios menores para separar as cargas — diminuindo o custo e aproveitando o navio maior. Enquanto o navio maior puxava os navios menores, eles carregavam os diversos tipos de produtos.

Pronto. Basicamente isso é a virtualização! O problema disso é que você precisa ter combustível e toda estrutura para cada um dos navios. Isso é muito ruim, não concorda?

Por isso foram criados os containers. Ao invés de termos vários navios que carregam um tipo de produto, temos somente um navio em que se pode transportar diversos tipos  —  e o custo do containers é muito menor que o de um navio pequeno. Com isso você reaproveita toda estrutura do navio, só depende do container específico para seu produto, e mantém seu produto isolado dos outros.

Voltando ao mundo real, a ideia do Docker é exatamente essa. Ao invés de subir várias máquinas virtuais (que seriam os navios na nossa analogia), você só precisa de uma máquina, e com ela pode rodar várias aplicações sem que haja conflitos entre elas. Todas as bibliotecas e recursos necessários a cada aplicação, desde libs, configurações e até mesmo outros programas, deverão estar todos contidos dentro do container. Com isso, além de não precisar instalar tudo a cada novo ambiente, você diminui o uso de recursos e mantém a configuração e as bibliotecas da sua aplicação, isoladas de outras aplicações, evitando conflitos.

Para resumir, a imagem a seguir mostra uma comparação entre máquina virtual e os containers. Fica claro o consumo maior de recursos nas máquinas virtuais, uma vez que para cada aplicação precisamos instalar e carregar um sistema operacional.

Comparação entre máquinas virtuais e containers Docker

Agora que entendemos melhor as vantagens do Docker e a diferença em relação à máquina virtual, no próximo artigo te mostrarei como subir uma stack básica utilizando o Docker Compose.