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

Teste o Compass grátis

Aprimore a experiência de desenvolvedor, catalogue todos os serviços e melhore a integridade do software.

Contêineres e máquinas virtuais 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 máquinas virtuais é que as VMs virtualizam uma máquina inteira até as camadas de hardware, enquanto 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 de 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 o tempo das 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 possa sair de um contêiner e afetar o hardware compartilhado. Os tempos de execução dos 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 ser vulneráveis a agentes prejudiciais. 

Provedores de contêineres populares

  • Docker: o tempo de execução de contêiner mais popular e muito usado. 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", é um sistema de contêineres que prioriza a segurança. Os contêineres RKT não permitem qualquer funcionalidade insegura, a menos que fique claro que o usuário ativou as características inseguras. 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 projeto Linux Containers é um sistema de tempo de execução de 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 ao fornecedor.

  • CRI-O: o CRI-O é uma implementação da Kubernetes Container Runtime Interface (CRI) que permite o uso de tempos de execução compatíveis com Open Container Initiative (OCI). É uma alternativa leve ao uso do Docker como tempo de execução do Kubernetes.

O que é uma máquina virtual?

Máquinas virtuais 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 separadas como sistemas independentes. 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 a máquina virtual 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 permitem um desenvolvimento interativo. Uma vez que a definição básica de hardware de uma VM é especificada, ela pode então ser tratada como um computador de funções básicas. É possível instalar o software na VM (um processo manual), e pode ser feito um instantâneo dela para capturar o estado de configuração atual. Os instantâneos da máquina virtual podem ser usados para restaurar a VM para esse ponto ou ativar VMs adicionais com essa configuração.

Contras

  • Velocidade de iteração: criar e gerar de novo VMs é um processo demorado porque elas englobam um sistema de pilha completa. Quaisquer modificações em um instantâneo de máquina virtual podem levar um tempo significativo para serem geradas de novo e validar que elas se comportam conforme esperado.

  • Custo do tamanho do armazenamento: as máquinas virtuais podem ocupar muito espaço de armazenamento, chegando bem rápido aos vários gigabytes. Esse crescimento pode levar a problemas de falta de espaço em disco na máquina host das VMs.

Provedores populares de máquinas virtuais

  • 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.

  • A VMware é uma empresa de capital aberto que criou seus negócios com base uma das primeiras tecnologias de virtualização de hardware x86. Ela conta com um hipervisor, que é um utilitário que implementa e gerencia várias máquinas virtuais. Além disso, tem uma interface de usuário robusta para gerenciar VMs. A VMware é uma ótima opção de máquina virtual corporativa que é compatível.

  • O QEMU é a opção de máquina virtual 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 concessão faz do 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 máquina virtual. A maioria dos outros requisitos “somente de software” podem ser atendidos usando contêineres.

Como você pode usar contêineres e máquinas virtuais juntos?

É possível usar contêineres e máquinas virtuais em uníssono, embora os casos de uso prático 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 máquina virtual para fazer experimentos 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 máquinas virtuais para suas necessidades de virtualização é entender suas necessidades de recursos e as negociações que você está disposto a fazer.

Recomendado para você

Comunidade do Compass

Tutorial: criar novo componente

Comece a usar o Compass de graça