Listar as diferenças entre contêineres e VMs

Concluído

O administrador do Windows Server da Contoso precisa determinar quais cargas de trabalho e cenários são apropriados para as VMs e quais são mais adequados para contêineres. Eles avaliarão as características das cargas de trabalho de contêineres e VMs, os cenários em que elas podem ser usadas e em quais circunstâncias elas podem ser aplicadas para aumentar a eficiência.

VMs versus Contêineres

As VMs e os contêineres são tecnologias de virtualização usadas para fornecer ambientes de computação isolados e portáteis a aplicativos e serviços:

  • As VMs simulam um computador inteiro, incluindo o hardware virtualizado, o sistema operacional, o modo de usuário e seu próprio modo kernel. As VMs são bastante ágeis e fornecem um suporte avançado para aplicativos. No entanto, tendem a ser grandes e consumir recursos do computador host.

  • Os contêineres (conforme descrito anteriormente) se baseiam no kernel do sistema operacional do host e contêm um processo de modo de usuário isolado para o aplicativo empacotado. Isso ajuda a tornar os contêineres muito leves e rápidos de iniciar. Diferente das VMs, os contêineres podem ser facilmente movidos dos ambientes de desenvolvimento e teste para os de produção. No entanto, como o sistema operacional não é exatamente o mesmo, nem todos os aplicativos em um ambiente de contêiner são executados ou executados da mesma maneira.

Semelhanças e diferenças

A tabela a seguir resume as semelhanças e diferenças entre os recursos para VMs e contêineres.

Recurso VM Contêiner
Isolamento Fornece isolamento completo do sistema operacional do host e de outras VMs. Fornece isolamento leve do host e de outros contêineres.
Sistema operacional Executa um sistema operacional completo, incluindo o kernel. Executa apenas a parte do modo de usuário de um sistema operacional.
Compatibilidade do convidado Pode executar qualquer sistema operacional com suporte dentro da VM Os contêineres do Windows exigem versões correspondentes do sistema operacional host e do contêiner. (Confira o modo de isolamento para saber mais e ver alternativas)
Implantação Implantada usando o gerenciador do Hyper-V ou outras ferramentas de gerenciamento de VM. Implantado e gerenciado usando o Docker ou outro runtime de contêiner. Vários contêineres podem ser implantados usando um orquestrador, como o Kubernetes.
Armazenamento persistente Usa arquivos de disco rígido virtual ou compartilhamento de protocolo SMB. Os dados não são mantidos quando um contêiner não existe mais. Para manter os dados em um contêiner com o Windows Server, é necessário usar o armazenamento persistente.
Balanceamento de carga e alta disponibilidade Usa um cluster de failover do Windows ou um balanceador de carga do Windows para mover VMs conforme necessário e dar suporte a um volume maior. Usa um orquestrador de contêineres para iniciar e parar contêineres automaticamente, escalar automaticamente e dar suporte ao tráfego adicional.
Rede Usa adaptadores de rede virtuais. Diferentes opções de rede estão disponíveis de acordo com o cenário. O padrão é uma rede NAT (conversão de endereços de rede) que usa um comutador interno e mapeia as portas do host para o contêiner.

Observação

É comum provisionar contêineres em uma VM altamente otimizada para fornecer isolamento e segurança aprimorados.

Vantagens dos contêineres

Em um nível superior, os contêineres:

  • Exigem relativamente poucos recursos. Consomem menos recursos que as VMs.

  • São inicializados rapidamente. Os tempos de inicialização do contêiner são praticamente equivalentes ao tempo necessário para iniciar um novo processo.

  • Melhoram a densidade do servidor. Os contêineres permitem uma utilização mais eficiente da memória, do disco e da CPU pelo hardware disponível do que as VMs. Isso faz com que haja menos servidores ociosos, resultando em melhor utilização dos recursos computacionais existentes. Isso é especialmente importante para provedores de serviços de nuvem e usuários, pois pode reduzir os custos.

  • Portabilidade. Os contêineres se comportam da mesma forma, independentemente do ambiente em que estão sendo executados. Um contêiner terá as dependências para que um aplicativo funcione. Isso permite o mesmo desempenho do contêiner no desenvolvimento, no teste e na produção, bem como entre o local e a nuvem.

O seguinte gráfico fornece uma comparação de isolamento e eficiência entre computadores, VMs, contêineres e processos e ilustra que:

  • Os computadores fornecem o maior grau de isolamento. O isolamento é progressivamente menor para VMs, contêineres e processos.

  • Os processos fornecem o maior grau de eficiência e, por sua vez, permitem uma possível densidade. Contêineres, VMs e computadores são progressivamente menos eficientes.

  • Recursos de hardware, kernel e sistema (como um sistema de arquivos) são compartilhados:

    • As VMs compartilham apenas o hardware.

    • Os contêineres compartilham hardware e um kernel (exceto contêineres do Windows Hyper-V, que não compartilham um kernel).

    • Os processos compartilham hardware, kernel e recursos do sistema.

    • Os computadores não compartilham nenhum desses itens.

Diagrama mostrando a comparação de isolamento e eficiência entre computadores, VMs, contêineres e processos.

Dica

Para o armazenamento persistente, você pode usar uma montagem de associação para montar um local no computador local. Os arquivos dentro do local estarão disponíveis quando você reiniciar um contêiner ou se quiser compartilhar os arquivos com vários contêineres. Se você quiser que um contêiner seja executado em vários computadores com acesso aos mesmos arquivos, será preciso usar um volume nomeado ou uma montagem SMB.

Orquestradores como o Kubernetes têm a própria implementação de armazenamento persistente.

Cuidado

Não vincule diretórios confidenciais de montagem, como C:\, a um contêiner não confiável. Isso permitiria que o contêiner não confiável alterasse arquivos no host aos quais ele normalmente não teria acesso e poderia criar uma violação de segurança. Além disso, verifique se o contêiner funcionará corretamente ao mudá-lo para um ambiente diferente. Isso significa que você deve evitar vincular um contêiner a uma unidade específica em um host específico.

Quando escolher uma VM

Use uma VM quando você:

  • Precisar gerenciar vários sistemas operacionais.

  • Precisar executar um aplicativo que exija todos os recursos e serviços de um sistema operacional completo, como uma GUI (interface gráfica do usuário).

  • Precisar de um ambiente que preserve as alterações e seja persistente. Exemplo: Os bancos de dados não são bons candidatos para serem executados em contêineres.

  • Precisar de segurança e isolamento completo.

Quando escolher um contêiner

Use um contêiner quando você:

  • Precisar de um pacote de aplicativo leve que seja iniciado rapidamente.

  • Precisa implantar diversas instâncias de um único aplicativo, e a escala automática e/ou horizontal é necessária.

  • Precisar executar um aplicativo ou processo não persistente sob demanda.

  • Precisar implantar um aplicativo que possa ser executado em qualquer infraestrutura subjacente.