Contêineres vs. máquinas virtuais

Saiba as diferenças entre contêineres e máquinas virtuais (VMs), provedores populares para cada um e como eles podem ser usados juntos.

Ian Buchanan Ian Buchanan

Contêineres e VMs são tecnologias de virtualização de recursos muito semelhantes. A virtualização é o processo no qual um recurso singular do sistema como RAM, CPU, Disco ou Rede pode ser "virtualizado" e representado como vários recursos. O principal diferencial entre contêineres e VMs é que as VMs virtualizam uma máquina inteira até as camadas de hardware e os contêineres virtualizam apenas camadas de software acima do nível do sistema operacional.

Um contêiner mostrando as diferenças entre máquinas virtuais e contêineres.

O que é um contêiner?

Os contêineres são pacotes de software leves que contêm todas as dependências necessárias para executar o aplicativo de software contido. Essas dependências incluem coisas como bibliotecas de sistema, pacotes de código externos de terceiros e outros aplicativos de nível de sistema operacional. As dependências incluídas em um contêiner existem em níveis de pilha superiores ao sistema operacional.

Prós

  • Velocidade de iteração
    Como os contêineres são leves e incluem apenas software de alto nível, eles são muito rápidos para modificar e iterar.
  • Ecossistema robusto
    A maioria dos sistemas tempo de execução de contêineres oferece um repositório público hospedado de contêineres pré-fabricados. Esses repositórios de contêineres contêm muitos aplicativos de software populares, como bancos de dados ou sistemas de mensagens, e podem ser baixados e executados na hora, economizando tempo para equipes de desenvolvimento

Contras

  • Explorações de host compartilhadas
    Todos os contêineres compartilham o mesmo sistema de hardware subjacente abaixo da camada do sistema operacional, assim, é possível que uma exploração em um contêiner possa sair do contêiner e afetar o hardware compartilhado. Os tempos de execução de contêineres mais populares têm repositórios públicos de contêineres pré-criados. Existe um risco de segurança em usar uma dessas imagens públicas, pois elas podem conter brechas ou podem ser vulneráveis a serem sequestradas por atores prejudiciais.

Provedores de contêineres populares

  • Docker
    O Docker é o tempo de execução de contêiner mais popular e amplamente utilizado. O Docker Hub é um repositório público gigante de aplicativos de software em contêiner populares. Os contêineres no Docker Hub podem ser baixados e implementados na hora em um tempo de execução local do Docker.
  • RKT
    Pronunciado "Rocket", o RKT é um sistema de contêineres voltado para segurança em primeiro lugar. Os contêineres RKT não permitem qualquer funcionalidade insegura, a menos que um usuário desative explicitamente os recursos de segurança. Os contêineres RKT visam resolver os problemas subjacentes de segurança exploradora de contaminação cruzada que outros sistemas de período de execução do contêiner sofrem.
  • Linux Containers - LXC
    O LXC é um componente de um sistema de tempo de execução do contêiner Linux de código aberto. O LXC é usado para isolar os processos de nível do sistema operacional uns dos outros. Na verdade, o Docker usa LXC nos bastidores. O Linux Containers tem como objetivo oferecer um tempo de execução do contêiner de código aberto neutro.
  • CRI-O
    O CRI-O é um padrão de tempo de execução do contêiner de código aberto emergente que está sendo desenvolvido em colaboração por muitas empresas corporativas. A especificação CRI-0 é otimizada para o sistema de gerenciamento de contêineres do Kubernetes.

O que é VM?

VMs são pacotes de software pesados que viabilizam emulação completa de dispositivos de hardware de baixo nível, como CPU, disco e dispositivos de rede. As VMs também podem incluir uma pilha de software complementar a ser executada no hardware emulado. Esses pacotes de hardware e software combinados produzem um instantâneo totalmente funcional de um sistema computacional.

Prós

  • Segurança com isolamento total
    As VMs são executadas isoladamente como um sistema totalmente independente. Assim, as VMs ficam imunes a quaisquer explorações ou interferências de outras VMs em um host compartilhado. Uma VM individual ainda pode ser sequestrada por uma brecha, mas essa VM explorada vai ser isolada e incapaz de contaminar quaisquer outras VMs vizinhas.
  • Desenvolvimento interativo
    Os contêineres são em geral definições estáticas das dependências esperadas e configuração necessárias para executar o contêiner. As VMs são mais dinâmicas e podem ser desenvolvidas interativamente. Uma vez que a definição básica de hardware é especificada para uma VM, esta pode então ser tratada como um computador de funções básicas. O software pode ser instalado manualmente na VM e esta pode ter um instantâneo para capturar o estado de configuração atual. Os instantâneos da VM podem ser usados para restaurar a VM nesse ponto no tempo ou processar VMs adicionais com essa configuração.

Contras

  • Velocidade de iteração
    As VMs consomem tempo para criar e regenerar porque englobam um sistema de pilha completa. Quaisquer modificações em um instantâneo de VM podem levar um tempo significativo para regenerar e validar que se comportam conforme esperado.
  • Custo do tamanho do armazenamento
    As VMs podem ocupar muito espaço de armazenamento. Elas podem crescer rápido para vários Gigabytes em tamanho. Esse crescimento pode levar a problemas de escassez de espaço em disco na máquina host de VMs

Provedores de VM populares

  • VirtualBox
    O VirtualBox é um sistema de emulação de arquitetura x86 livre e de código aberto de propriedade da Oracle. O VirtualBox é uma das plataformas de VM mais populares e estabelecidas com um ecossistema de ferramentas suplementares para ajudar a desenvolver e distribuir imagens de VM.
  • VMware
    A VMware é uma empresa de capital aberto que construiu seus negócios em uma das primeiras tecnologias de virtualização de hardware x86. O VMware vem incluído com um hipervisor que é um utilitário que vai implementar e gerenciar várias VMs. O VMware tem uma interface robusta para gerenciar VMs. O VMware é uma ótima opção de VM corporativa que oferece suporte.
  • QEMU
    O QEMU é a opção de VM de emulação de hardware mais robusta. Ele tem suporte para qualquer arquitetura de hardware genérico. O QEMU é um utilitário apenas de linha de comando e não oferece uma interface gráfica de usuário para configuração ou execução. Esta negociação faz da QEMU uma das opções de VM mais rápidas.

Qual opção é melhor para você?

Se você tiver requisitos de hardware específicos para o seu projeto ou se estiver desenvolvendo em uma plataforma de hardware e precisar segmentar outra como Windows vs. macOS, você vai precisar usar uma VM. A maioria dos outros requisitos “somente de software” podem ser atendidos usando contêineres.

Como você pode usar contêineres e VMs juntos?

É totalmente possível usar contêineres e VM em uníssono, embora os casos de uso práticos possam ser limitados. Uma VM pode ser criada para emular uma configuração de hardware exclusiva. Um sistema operacional pode ser instalado dentro do hardware desta VM. Quando a VM estiver funcional e inicializar o sistema operacional, um tempo de execução do contêiner pode ser instalado no sistema operacional. Neste ponto, temos um sistema computacional funcional com hardware emulado no qual podemos instalar contêineres.

Um uso prático para esta configuração é a experimentação para o sistema em implementações de chips. Sistemas populares em dispositivos computacionais de chip como o Raspberry Pi, ou placas de desenvolvimento BeagleBone podem ser emulados como uma VM, para experimentar com contêineres em execução nelas antes de testar o hardware real.

Mas, na maioria das vezes, é provável que suas necessidades sejam atendidas por um dos dois. A chave para decidir entre contêineres ou VMs para suas necessidades de virtualização é entender suas necessidades de recursos e as negociações que você está disposto a fazer.