Contêineres vs. máquinas virtuais

Aplica-se a: Windows Server 2022, Windows Server 2019 e Windows Server 2016

Este tópico aborda algumas das principais semelhanças e diferenças entre contêineres e VMs (máquinas virtuais) e quando pode ser ideal usar cada um deles. Os contêineres e as VMs têm os próprios usos. Na verdade, muitas implantações de contêineres usam VMs como o sistema operacional do host em vez da execução direta no hardware, especialmente ao executar contêineres na nuvem.

Para obter uma visão geral dos contêineres, confira Windows e contêineres.

Arquitetura do contêiner

Um contêiner é um silo leve e isolado para executar um aplicativo no sistema operacional do host. Os contêineres se baseiam no kernel do sistema operacional do host (que pode ser considerado como o encanamento subterrâneo do sistema operacional) e contêm apenas aplicativos e algumas APIs e serviços leves do sistema operacional que são executados no modo de usuário, conforme mostrado neste diagrama.

Diagrama arquitetônico mostrando como os contêineres são executados na parte superior do kernel

Arquitetura da máquina virtual

Ao contrário de contêineres, as VMs executam um sistema operacional completo, incluindo o próprio kernel, conforme mostrado neste diagrama.

Diagrama arquitetônico mostrando como as VMs executam um sistema operacional completo ao lado do sistema operacional do host

Contêineres vs. máquinas virtuais

A tabela a seguir mostra algumas das semelhanças e diferenças dessas tecnologias complementares.

Recurso Máquina virtual Contêiner
Isolamento Fornece isolamento completo do sistema operacional do host e de outras VMs. Isso é útil quando um limite de segurança forte é crítico, como hospedar aplicativos de empresas concorrentes no mesmo servidor ou cluster. Normalmente, fornece isolamento leve do host e de outros contêineres, mas não fornece um limite de segurança tão forte quanto uma VM. (Você pode aumentar a segurança usando o modo de isolamento do Hyper-V para isolar cada contêiner em uma VM leve).
Sistema operacional Executa um sistema operacional completo, incluindo o kernel, exigindo mais recursos do sistema (CPU, memória e armazenamento). Executa a parte do modo de usuário de um sistema operacional e pode ser adaptado para conter apenas os serviços necessários para seu aplicativo, usando menos recursos do sistema.
Compatibilidade do convidado Executa praticamente qualquer sistema operacional dentro da máquina virtual É executado na mesma versão do sistema operacional do host (o isolamento do Hyper-V permite executar versões anteriores do mesmo sistema operacional em um ambiente de VM leve)
Implantação Implante VMs individuais usando o Windows Admin Center ou o Gerenciador do Hyper-V; implante várias VMs usando o PowerShell ou o System Center Virtual Machine Manager. Implante contêineres individuais usando o Docker por meio da linha de comando; implante vários contêineres usando um orquestrador, como o Serviço de Kubernetes do Azure.
Atualizações e upgrades do sistema operacional Baixe e instale as atualizações do sistema operacional em cada VM. A instalação de uma nova versão do sistema operacional exige o upgrade ou, muitas vezes, apenas a geração de uma VM totalmente nova. Isso pode ser demorado, especialmente se você tem muitas VMs... A atualização ou o upgrade dos arquivos do sistema operacional dentro de um contêiner é o mesmo:
  1. Edite o arquivo de build da imagem de contêiner (conhecido como Dockerfile) para que ele aponte para a última versão da imagem base do Windows.
  2. Recompile a imagem de contêiner com essa nova imagem base.
  3. Efetue push da imagem de contêiner para o registro de contêiner.
  4. Reimplante-a usando um orquestrador.
    O orquestrador fornece uma automação avançada para fazer isso em escala. Para obter detalhes, confira Tutorial: Atualizar um aplicativo no Serviço de Kubernetes do Azure.
Armazenamento persistente Use um VHD (disco rígido virtual) para o armazenamento local de uma só VM ou um compartilhamento de arquivo SMB para o armazenamento compartilhado por vários servidores Use os Discos do Azure para o armazenamento local para um só nó ou os Arquivos do Azure (compartilhamentos SMB) para armazenamento compartilhado por vários nós ou servidores.
Balanceamento de carga O balanceamento de carga da máquina virtual move as VMs em execução para outros servidores em um cluster de failover. Os próprios contêineres não se movem; em vez disso, um orquestrador pode iniciar ou parar automaticamente os contêineres em nós de cluster para gerenciar as alterações na carga e na disponibilidade.
Tolerância a falhas As VMs podem fazer failover para outro servidor em um cluster, com o sistema operacional da VM reiniciando no novo servidor. Se um nó de cluster falhar, todos os contêineres em execução nele serão recriados rapidamente pelo orquestrador em outro nó de cluster.
Rede Usa adaptadores de rede virtuais. Usa uma exibição isolada de um adaptador de rede virtual, fornecendo um pouco menos de virtualização, o firewall do host é compartilhado com os contêineres, usando menos recursos. Para obter mais informações, confira Rede do contêiner do Windows.