Docker vs Virtual Machines

Docker vs Virtual Machines

Vamos fazer juntos uma exploração de diferentes casos de uso, desempenho, gerenciamento, portabilidade, segurança entre outros.

A virtualização de recursos de hardware físico tem sido uma das tendências mais promissoras do século 21. Houve um acordo silencioso de que a computação moderna precisa ir além dos limites do hardware fisico. Dependendo de quem você perguntar, o Docker e as máquinas virtuais tem suas próprias vantagens distintas.


O que é Docker?

Docker é uma ferramenta de código aberto que usa containers para criar, implantar e gerencias aplicativos distribuídos.

Os desenvolvedores usam containers para criar pacotes para aplicativos que incluem todos os componentes principais que são necessários para executar o aplicativo isoladamente.

Desde que o Docker foi lançado em 2014, ele alcançou um status aclamado pela crítica. Muitas organizações optam por usar o Docker em vez das máquinas virtuais devido aos benefícios de desempenho.


O que é uma Máquina Virtual?

Uma máquina virtual é um arquivo,que atua como um computador físico, usa os recursos físicos do dispositivo em que está operando para replicar o ambiente de um dispositivo físico.

Embora uma máquina virtual use os recursos do computador para funcionar, ela na verdade fornece seu próprio hardware virtual. O hardware virtual de uma máquina virtual inclui CPU,memoria,discos rígidos e interfaces de rede.

As máquinas virtuais são isoladas do sistema do dispositivo físico e operam dentro de uma sandbox.

Isso os torna ideais para a criação de backups e execução de software.


Por que preciso usar o Docker?

O Docker é usado como alternativa porque são mais leves em termos de recursos do que as máquinas virtuais. Os containers compartilham o sistema operacional,enquanto as máquinas virtuais são projetadas para emular hardware virtual.

O Docker usa o mecanismo Docker que reside em uma instância do Linux, em vez das máquinas com uso intensivo de recursos virtuais usadas pelas máquinas virtuais. Essa estrutura significa que os containers do Docker têm o potencial de sustentar mais de cinco vezes a quantidade de instancias de aplicativos de servidor que você poderia com uma máquina virtual.

Outra grande vantagem que foi outro grande motivo do sucesso do docker, foi pelo fato dos desenvolvedores poderem personalizar e adicionar seu próprio código para conseguir um ambiente mais enxuto e que seja um espelho do ambiente de produção.

Em resumo alem da economia e do baixo custo do docker, os sistemas feitos usando um docker podem ser usados tanto na maquina local quanto em nuvem.


Por que preciso de uma máquina virtual?

As máquinas virtuais continuam sendo extremamente importantes, eles ainda fornecem um meio confiável de limitar os custos que vêm com o hardware físico. A virtualização de sua infraestrutura com máquinas virtuais torna o uso mais eficiente de seus recursos de rede.

Por exemplo, você não precisa desembolsar os recursos de energia e ventilador para sustentar uma máquina virtual.

Você também pode provisionar recursos com muito mais eficiência com máquinas virtuais. As máquinas virtuais podem ser migradas de um servidor físico para outro para garantir que os recursos de computação sejam distribuídos uniformemente entre os dispositivos.

As máquinas virtuais também diminuem o risco de falha de sua infraestrutura.

Como consequência, muitos administradores começaram a usar máquinas virtuais como uma solução de recuperação de desastres e para fazer backup de dados.


Docker vs Máquinas Virtuais frente a frente

Docker vs Virtual Machines


Desempenho

Um container pode compartilhar um kernel e bibliotecas de aplicativos de uma maneira que as máquinas virtuais não podem.

Docker requer menos recursos de computação do que as máquinas virtuais, o que oferece uma melhor experiência dentro do aplicativo.

O Docker consome menos recursos e pode iniciar muito mais rápido do que as máquinas virtuais. O motivo é que as máquinas virtuais precisam carregar um sistema operacional a cada inicialização. Da mesma forma, você não precisa alocar recursos para containers como faz com as máquinas virtuais.


Gestão

Em termos de gerenciamento, cada uma dessas tecnologias oferece uma abordagem mais flexível para o provisionamento de recursos. No entanto essas duas tecnologias ainda precisam ser gerenciadas com eficácia para funcionar bem em seu ambiente. Com a tecnologia de container, tudo se resume a gerencias questões de segurança.

Com as máquinas virtuais, a complexidade se resume ao gerenciamento de recursos virtuais. Por exemplo, você precisa de largura de banda e capacidade de processamento para oferecer suporte a máquias virtuais.

O administrador também precisa levar em consideração como ele reconcilia o uso da máquina virtual com os recursos disponíveis em toda a rede.

Existe o risco de exceder os recursos disponíveis ou de uma única falha de hardware pode apagar um monte de máquinas de uma só vez.


Portabilidade

Os containers do Docker podem ser transportados facilmente porque não têm sistemas operacionais separados.

Em contraste, as máquinas virtuais não são tão portáteis pois cada uma tem seu próprio sistema operacional, pois o sistema operacional não pode ser transferido para outra plataforma e funcionar bem.

Em ambientes onde você precisa implantar uma variedade de aplicativos em diferentes problemas, é melhor usar o Docker.


Segurança

Esta é uma área particularmente complexa porque há muitos fatores a serem discutidos, desde as vulnerabilidades inatas do Docker até o ponto único de falha do hypervisor de uma máquina virtual.

Custo

O custo do Docker e das máquinas virtuais é outra área dificil de medir.

Os container tem um TCO ou custo total de propriedade mais baixo do que a virtualização de hardware. A razão por trás disso é que os containers do Docker usam recursos com mais eficiência. Cada máquina virtual tem seu próprio sistema operacional que precisa ser sustentado pelo sistema host.

O Docker elimina esse problema usando um sistema operacional para todos os seus aplicativos. Os containers compartilha um sistema operacional na tentativa de minimizar os requisitos de recursos.

Em comparação, as máquinas virtuais teriam um sistema operacional para coda aplicativo, o que significa que há mais recursos pelos quais você precisa pagar.

Expero ter conseguido trazer de fora resumida uma explicação sobre a diferença entre Docker e VM.

Mano Docker é vida, so acho ruim o consumo de memoria dele no windows

No windows o que realmente consome é o wsl2 que é uma vm necessária pra rodar o docker. Poderia ter uma otimização para reduzir esse consumo do wsl2 né?
na verdade já tem algumas otimizações para reduzir consumo de ram no windows, infelizmente por necessitar de uma maquina virtual completa pelo hypervisor fica essa impressão do wsl ser mais pesado, anyway o vídeo do Fabio Akita sobre setup dev em WSL mostra alguns truques para reduzir esta impressão
Mano Depois vou ver isso , valeu
Usar docker no Windows é um verdadeiro pecado. Mas Docker é algo tão bom e tão incrível que mesmo num modo completamente inadequado deve ser mais funcional que VM's. Mas vá para o Linux e aí virá o container desenvolver todo o potencial!
Sim infelizmente temos esse impecilio no Windows, mas nem tudo são um mar de flores na nossa area certo? rsrsrsrs!

Poxa muito bacana a informação, venho dando uma olhada em Docker, já tenho um pequeno teste com ele e falta me aprofundar mais. Na verdade ter mais segurança em usá-lo, e isso só estudando e testando.

Sim, cara quero ver se trago algo, subindo uma aplicação containirizada bem massinha!

bem interessante o artigo!

Vale a pena dar uma estudada em uma ferramenta intermediária entre Docker e VM chamada LXD. https://www.tabnews.com.br/gustavohenrique/lxd-linux-container-como-alternativa-ao-docker

Interessante não conhecia, vou ler seu artigo com mais calma!