Docker para desenvolvedores – Que vantagem eu teria com Docker?

PorRomulo Scampini em

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.

De 0 a 10, o quanto você recomendaria este artigo para um amigo?

 

Deixe um comentário! 6

4 comentários

Comentários

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Comentando como Anônimo

  1. Hehehehehe…. Gostei da analogia, vou começar a usá-la.

    Atualmente desenvolvo usando o Docker, e posso afirmar que me ajuda muito, principalmente quando se trabalha em mais de um projeto.

    No meu trabalho eu mantenho um website usado PHP 5.6, crio aplicações sob encomenda para uso interno na intranet, utilizando o Python 3, e estou remodelando a parte de funcionamento do website para a versão 7 do PHP. Se eu estivesse fazendo tudo na minha máquina de desenvolvimento, poderia ser inviável, além de deixar a máquina lenta. Hoje cada coisa tem sua virtualização e só inicio aquilo que preciso. Posso isolar o banco de dados do server side. Posso separar o client side do server side. Posso destruir e reconstruir o container com uma linha de comando e tudo ainda se mantém funcionando.

  2. Ainda não vi vantagem, a não ser que eu seja um distribuidor :~

    Só o fato de instalar um virtualbox no notebook para desenvolvimento já até da arrepio, isso pq minha maq. possui uma boa config.

    Desculpe, mas não me convenceu ainda, galera fala, ah mas já vem tudo pronto, coisa todas prontas emburrece a galera. Ex. nego aprende a “programar jQuery”, pede para fazer algo no javascript puro, não sai da primeira linha.

    Sim, algumas automatizações eu apoio, como gulp para minificação e livereload.

    1. Olá Diego.
      A vantagem dele é exatamente não precisar subir uma VM, e ter um ambiente tão isolado quanto. Imagine o cenário onde tenha a necessidade de subir diferentes ambientes, como por exemplo um banco de dados PostgreSQL 9.2, e outro PostgreSQL 9.4. Isso é possível, porém se gasta muito tempo, sendo que seu objetivo é validar os cenários, e não instalar o BD. Com Docker, você consegue subir esse ambiente facilmente, e não perde tempo com a instalação do banco, que não é seu foco.
      Espero ter esclarecido um pouco mais, porém se mesmo assim não consegui lhe ajudar, pode mandar mensagem novamente.
      Obrigado pelo feedback! o/

leia mais
Este projeto é mantido e patrocinado pelas empresas: