Skip to content

Containers para que te quero! Uma introdução dos pros e contras de se utilizar

Todo mundo sabe o quanto containers vem crescendo nos últimos anos. No Artigo de hoje vou explicar quais os prós e contras de se utilizar em PROD e DEV.

Mas por que eu não levava isso tão a sério no começo? Simples, porque em resumo sua responsabilidade é virtualizar. Quem já trabalhou com VMs como eu, sabe o quanto é chato e pesado. Quando tive o prazer (estou zoando, claro!) de trabalhar com Sharepoint, eu tinha duas máquinas virtuais, uma para o Sharepoint Server e outra para o SQL Server. Resumindo, demais de tenso!

Mas vamos voltar para containers. Por que ele é tão diferente? E quais são as vantagens e contras dessa ferramenta, eu mostro mais abaixo.

Apesar de vermos bastante a palavra containers apenas nos últimos anos, não significa que foi criado nesse tempo, para quem não sabe, lá trás, por volta da década de 80, o significado de containers já existia conforme você pode ver neste link.

Mas afinal qual a diferença de containers para VM:

  • VM tem um completo sistema operacional e aplicações.
  • Uma VM pode ter vários gigas dependendo do Sistema Operacional (SO).
  • VM usa hypervisors (Uma camada entre o software e o hardware ou gerenciador da maquina virtual) para compartilhar hardware enquanto containers compartilham o kernel do OS da máquina física.
  • VM tem seu próprio kernel e não utiliza da máquina física.

Como podem ver em containers temos menos camadas, isso por que em VM você literalmente tem uma máquina nova que usufrui do seu hardware e já em containers não temos isso, ele compartilha do mesmo kernel do SO.

Mas qual o conceito de um container:

“A container image is a lightweight, stand-alone, executable package of a piece of software that includes everything needed to run it: code, runtime, system tools, system libraries, settings.” by Docker Team

Em docker ou em qualquer outra ferramenta do tipo temos duas coisas, Imagem e Container. Imagem é como se fosse uma classe de programação e container é como se fosse uma instância de objeto de uma classe. A imagem é um código que diz o que o container irá ter quando for executado.

Como podem ver, a equipe do docker classifica containers como algo leve e que tem tudo o que você precisa para executar um código ou um software.

Vamos fazer uma comparação, quando você quer virtualizar um SQL Server ou outro bando de dados, você cria uma máquina virtual, essa máquina obrigatoriamente deve ter um SO e junto com o SO vem um monte de coisas como browser, explorer, configurações de hardware e tantas outras, ai por ultimo você instala o seu banco de dados e começa a usar, certo?

Com containers as coisas são diferentes, no mesmo exemplo acima você apenas diz que quer um banco de dados e esse container será executado sobre o seu SO. As coisas a mais que uma VM tem, um container não tem. O que você gastaria de gigas de memória para sua VM, você gasta alguns megas para o seu container. E por que isso? Simples, container compartilha o kernel do SO, lembra?

Agora nesse momento você me diz, pow só vejo vantagem, bora arrancar as VM e somente usar containers. Calma, abaixo listo os prós e contras de containers:

Prós:

  • Um container tem um tamanho muito menor que de uma VM.
  • Executar um container precisa de menos recursos que uma VM.
  • Provisionar um container somente toma alguns segundos enquanto que uma VM precisa esperar carregar o SO e depois a aplicação desejada.
  • Testar e rastrear um bug também torna menos complicado uma vez que não existe diferença executar localmente ou em produção.
  • Containers são mais baratos por precisarem de menos recursos.
  • Containers hoje são uma grande opção para micro serviços.
  • User containers é extremamente fácil.

Contras:

  • Uma das principais desvantagens é a segurança, por compartilhar o mesmo kernel, se o kernel tem problemas o container também terá. Isso acontece por que um container é menos isolado que uma VM.
  • Em containers temos menos flexibilidade com SO. Se seu SO é Linux, você só poderá usar imagens linux. Já em VM podemos ter uma maquina com Windows mais ter uma virtualização de um Linux.

Como pode ver, existem vantagens e desvantagens sobre a utilização de containers. O que se deve é avaliar se as vantagens são maiores do que as desvantagens em cada cenário. O que eu posso falar é que o mercado está aderindo muito bem a esse novo tema justamente por causa do mundo Cloud. Quando se estamos na nuvem não temos muita permissão para instalar o que queremos e utilizando um container esse cenário muda, o céu é o limite e tudo que queremos pode ser instalado facilmente.

E para os devs, compensa?

Já respondo a isso com um SIM. E muito. Vou dar o meu exemplo, ultimamente estou utilizando .Net Core no Ubuntu. Minhas aplicações normalmente usam SQL Server e atualmente esse banco já existe no Linux, mas quando instalado se inicia uma série de serviços que só fazem a máquina ficar mais lenta ainda. Para um DEV compensa ter esses serviços ligados quando não se está usando o banco? Claro que não, por isso uso uma imagem do SQL Server e o trabalho que eu tenho é apenas dar um docker start.

Conclusão

Containers estão crescendo cada vez mais e usados por diferentes segmentos, como empresas privadas, governos e outros. Na minha opinião é uma evolução das tradicionais máquinas virtuais, são mais baratas, rápidas para levantar mas, como qualquer tecnologia, não é a bala de prata para resolver tudo. Se você quer uma dica minha, estude, use e veja se para o seu cenário vale a pena. Mas não se esqueça que para o ambiente DEV é quase uma obrigação estar usando.

Você gostou desse artigo? Gostaria de saber mais sobre Testes? Eu desenvolvi um curso na Udemy, preço camarada. Acesse https://www.udemy.com/automatizando-testes-para-sua-aplicacao

Published inContainers

Be First to Comment

Deixe uma resposta

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