Close

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

Foto de rosto de Ian Buchanan
Ian Buchanan

Engenheiro Principal de Soluções


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 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 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 podem ser vulneráveis a serem sequestradas por agentes prejudiciais.

Provedores de contêineres populares


ícone de compilação de código
Material relacionado

Kubernetes vs. Docker

ícone de três anéis
VER SOLUÇÃO

Gerencie componentes com o Compass

  • 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 ative explicitamente os recursos inseguros. 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
    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 isoladamente como sistemas totalmente 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 podem ser desenvolvidas de forma interativa. 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. O software pode ser instalado manualmente na VM, 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 máquina virtual para esse ponto no tempo ou ativar máquinas virtuais 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 máquina virtual podem levar um tempo significativo para regenerar e validar seu comportamento conforme esperado.
  • Custo do tamanho do armazenamento
    As máquinas virtuais 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 populares de máquinas virtuais

  • 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. A VMware conta com um hipervisor que é um utilitário que vai implementar e gerenciar várias máquinas virtuais. A VMware tem uma interface de usuário robusta para gerenciar VMs. A VMware é uma ótima opção de máquina virtual corporativa que oferece suporte.
  • QEMU
    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 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 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.

Ian Buchanan
Ian Buchanan

Embora Ian tenha uma experiência vasta com Java e .NET, ele é mais conhecido como campeão de métodos ágeis em grandes empresas. Atualmente, ele está focado na cultura emergente do DevOps e nas ferramentas para permitir uma melhor integração contínua, entrega contínua e análise de dados. Durante sua carreira, ele gerenciou com sucesso ferramentas de desenvolvimento de software empresarial em todas as fases dos seus ciclos de vida. Ele trouxe melhorias de processo na organização toda com resultados de maior produtividade, melhor qualidade e maior satisfação do cliente. Ele construiu equipes multinacionais que valorizam a autodireção e a auto-organização. Quando não está falando ou criando códigos, Ian se rende à sua paixão por analisadores, meta programação e linguagens específicas de domínio. Siga-o em @devpartisan.


Compartilhe este artigo

Leitura recomendada

Marque esses recursos para aprender sobre os tipos de equipes de DevOps ou para obter atualizações contínuas sobre DevOps na Atlassian.

Ilustração DevOps

Comunidade do Compass

ilustração de superação de obstáculos

Tutorial: criar novo componente

Ilustração do mapa

Comece a usar o Compass de graça

Inscreva-se para receber a newsletter de DevOps

Thank you for signing up