Containers e máquinas virtuais (VMs): qual a diferença?

Copiar URL

Containersmáquinas virtuais (VMs) são abordagens para empacotar ambientes de computação. Elas combinam vários componentes de TI e isolam esses ambientes do restante do sistema. A principal diferença entre elas está nos componentes que são isolados, o que afeta a escalabilidade e a portabilidade de cada abordagem.

Conheça a solução de virtualização da Red Hat

Um container é um software que contém todos os componentes e funcionalidades necessários para executar uma aplicação. As aplicações mais modernas são compostas por vários containers, cada qual responsável por uma função específica. Containers não utilizam um hipervisor. Além disso, costumam ser medidos em megabytes e são considerados uma forma mais ágil e rápida de gerenciar o isolamento de processos.

Um dos fatores que mais contribui para o sucesso dos containers é a portabilidade. Assim como peças de LEGO™ que se encaixam, containers individuais podem ser trocados e movidos entre ambientes diferentes com facilidade. Quando uma aplicação e suas dependências são empacotadas em um container, é possível implantá-la onde for necessário. Ela funcionará exatamente da mesma forma seja no laptop do desenvolvedor, em um data center, na nuvem ou na edge.

O Docker, uma plataforma open source para criação, implantação e gerenciamento de aplicações em containers, foi de extrema importância para a evolução dessa tecnologia ao longo dos anos. 

Máquinas virtuais (virtual machines) são essenciais para a cloud computing. Elas replicam o funcionamento dos computadores físicos ao executar sistemas operacionais em instâncias isoladas. É comum hospedar várias VMs em um único servidor, com um hipervisor atuando como uma camada de software lightweight entre elas e o host físico. O hipervisor gerencia com eficiência o acesso aos recursos, permitindo que as máquinas virtuais funcionem como servidores distintos, oferecendo maior flexibilidade e agilidade.

As VMs ganharam popularidade nos anos 2000 devido a iniciativas de consolidação e corte de custos, mas sua utilização evoluiu com o tempo. As empresas aperfeiçoaram as implantações das VMs, indo além da consolidação para abranger diversos casos de uso. Entre eles, destacam-se o fornecimento de recursos sob demanda para aplicações e a otimização do acesso a recursos dispendiosos, como GPUs.

As VMs também serviram como base para muitos ambientes de cloud computing, viabilizando a virtualização de recursos e oferecendo suporte a multitenancy e isolamento (vários clientes executando sistemas que compartilham os mesmos recursos).

As máquinas virtuais contêm seus próprios sistemas operacionais, o que permite que elas executem várias funções de uso intensivo de recursos simultaneamente A maior disponibilidade de recursos para as VMs permite extrair, dividir, duplicar e replicar o funcionamento de servidores, sistemas operacionais, desktops, bancos de dados e redes inteiros. 

Além das diferenças tecnológicas, a comparação entre containers e máquinas virtuais é, indiretamente, uma comparação entre as modernas práticas de TI nativas em nuvem e as arquiteturas de TI tradicionais. 

Novas práticas de TI 
(implantação nativa em nuvemCI/CDDevOps) só são possíveis porque as cargas de trabalho são divididas nas menores unidades de serviço (geralmente uma função ou um microsserviço) e executadas isoladamente. Uma vez isoladas, elas são desenvolvidas, implantadas, gerenciadas e escaladas de forma independente.

Essas pequenas unidades são melhor empacotadas em containers, o que permite que várias equipes trabalhem em partes de um app ou serviço sem interromper, ou comprometer o código empacotado em outros containers.

Arquiteturas de TI tradicionais
(monolíticas e legadas) mantêm todos os aspectos de uma carga de trabalho firmemente agrupados e incapazes de funcionar sem que arquitetura completa seja executada. Como não é possível dividir esses aspectos, eles precisam ser empacotados como uma unidade completa em um ambiente maior, geralmente uma VM.

Era comum criar e executar aplicações inteiras dentro de VMs, mesmo sabendo que ao armazenar todo o código e dependências, ela ficaria grande demais e isso poderia gerar falhas em cascata e downtime durante as atualizações.

 

virtualization vs containers

Virtualização

Um software chamado hipervisor separa recursos das máquinas físicas para serem particionados e dedicados às VMs. Quando um usuário emite uma instrução para uma VM que exige recursos adicionais do ambiente físico, o hipervisor retransmite a solicitação ao sistema físico e armazena as alterações em cache. As VMs parecem e agem como servidores físicos e, por isso, podem multiplicar as desvantagens da dependência de aplicações e de um sistema operacional com grande área de ocupação (desnecessária para a execução de uma única app ou microsserviço).

Containers

Tudo em um container é empacotado e enviado utilizando uma imagem de container, isto é, um arquivo que inclui todas as bibliotecas e dependências. Os arquivos de imagens de container são semelhantes aos pacotes de instalação de software (como RPMs no Linux). No entanto, eles só precisam de um runtime de container e um kernel compatível para executar a aplicação, não importando o sistema operacional usado para criar o container nem a origem das bibliotecas dentro dele. Como os containers são bem pequenos, geralmente temos centenas deles levemente acoplados uns aos outros. Por isso, plataformas de orquestração de container (como o Red Hat OpenShift e o Kubernetes) são usadas para provisioná-los e gerenciá-los.

Depende. Você precisa de uma instância pequena movida com facilidade (containers) ou de uma alocação semipermanente de recursos de TI personalizados?

Outros fatores a se considerar incluem: arquitetura da aplicação, práticas de desenvolvimento, segurança e exigências regulatórias.

Pequenos e lightweight, os containers podem ser implantados facilmente em sistemas bare metal, bem como em ambientes públicos, privados, híbridos e multicloud. Também é muito comum executar containers em VMs, uma vez que as maioria das organizações já possui uma infraestrutura com foco em máquinas virtuais em funcionamento. Isso atesta a flexibilidade dos containers. 

Containers também são o ambiente ideal para implantar as apps nativas em nuvem atuais, que não são nada mais que coleções de microsserviços criados para oferecer desenvolvimento consistente e gerenciamento automatizado em ambientes públicosprivadoshíbridosmulticloud. As apps nativas em nuvem ajudam a acelerar a criação de novas apps, a otimização de apps existentes e como todas elas se conectam. 

Em comparação com as VMs, os containers são mais apropriados para: 

  • Criar apps nativas em nuvem
  • Empacotar microsserviços
  • Incorporar aplicações em práticas de DevOps ou CI/CD
  • Mover projetos de TI escaláveis por uma área de ocupação de TI diversa 

Em comparação com containers, as VMs são mais apropriadas para: 

  • Armazenar cargas de trabalho monolíticas, legadas e tradicionais
  • Isolar ciclos de desenvolvimento arriscados
  • Provisionar recursos de infraestrutura (como redes, servidores e dados)
  • Executar um sistema operacional diferente dentro de outro, como o Unix no Linux

E, se você tem aplicações em execução tanto em máquinas virtuais quanto em containers, o Red Hat Service Interconnect pode ajudar a conectar aplicações e serviços em ambientes diferentes.

Máquinas virtuais e containers podem ser implantados em diversos tipos de infraestrutura, incluindo servidores bare metal.

O que é bare metal?

“Bare metal” se refere a um computador ou servidor executado em um hardware e que não requer assistência de hipervisores, máquinas virtuais ou conteinerização para operar. Servidores bare metal também são conhecidos como servidores dedicados. Seus componentes de hardware não são compartilhados com outros usuários, logo são para uso exclusivo do contratante do serviço.

Esses servidores têm o poder de processar um grande volume de dados com baixa latência, ou seja, eles são rápidos e potentes. Com bare metal, o usuário tem total controle sobre a infraestrutura do seu servidor. Ele pode escolher o sistema operacional e adequar hardware e software às necessidades específicas de suas cargas de trabalho.

No entanto, apesar das implantações bare metal serem indispensáveis quando o desempenho e o acesso direto ao hardware são essenciais, elas podem não oferecer o mesmo nível de flexibilidade e gerenciamento de recursos que os containers e as máquinas virtuais.

Posso hospedar VMs em bare metal?

Sim, servidores bare metal podem hospedar máquinas virtuais, basta implantar neles um hipervisor e um software de virtualização.

Posso hospedar containers em bare metal?

Sim, plataformas como o Docker, Kubernetes e Podman foram criadas para ajudar usuários a gerenciar e implantar containers em escala em várias infraestruturas, incluindo servidores bare metal. 

O Red Hat® OpenShift® é uma plataforma de aplicações empresarial baseada em container que oferece alternativas de implantação e opções de consumo com suporte a todo tipo de app ou ambiente. Com o Red Hat OpenShift, as organizações podem criar, implantar, executar e gerenciar aplicações de qualquer lugar em escala, com segurança e rapidez. 

O Red Hat OpenShift Virtualization, uma funcionalidade do Red Hat OpenShift, permite que equipes de TI executem máquinas virtuais e containers na mesma plataforma Kubernetes, simplificando o gerenciamento e reduzindo o tempo até a produção.  

Dessa forma, as empresas aproveitam os investimentos prévios em virtualização, ao mesmo tempo que se beneficiam da simplicidade e da velocidade de uma plataforma de aplicações moderna. Ao integrar VMs na plataforma de aplicações do OpenShift, você estabelece um ambiente consistente para o desenvolvimento e a implantação de aplicações. Os desenvolvedores podem criar, testar e implantar aplicações com mais rapidez, acelerando o time to market.

Por que escolher a Red Hat para a adoção de containers?

Por que escolher a Red Hat para a virtualização?

Hub

Blog da Red Hat

Tudo relacionado à Red Hat: soluções, treinamentos e certificações Red Hat, casos de sucesso de clientes, novidades dos nossos parceiros e notícias sobre projetos das comunidades open source.

Teste as soluções da Red Hat

Você sabia que a Red Hat oferece versões de teste gratuitas de suas soluções? Aproveite e obtenha experiência prática, prepare-se para uma certificação da Red Hat ou avalie na prática se a solução é adequada para ao caso de uso.

Leia mais

What is the Kubernetes Java client?

The Kubernetes Java client is a client library that enables the use of the Java programming language to interface with Kubernetes.

Kubernetes na AWS: comparação entre K8s autogerenciado e plataforma de aplicações gerenciada

Conheça as vantagens de usar o Kubernetes (K8s) na AWS e entenda as diferenças entre o Kubernetes autogerenciado e uma plataforma de aplicações gerenciada.

O que é hosted control plane?

Hosted control plane refere-se ao plano de gerenciamento desacoplado que permite o controle e gerenciamento consolidados dos principais componentes do plano de controle.

Containers: leitura recomendada

Produto em destaque

  • Red Hat OpenShift Virtualization

    Um recurso do Red HatⓇ OpenShiftⓇ que integra perfeitamente máquinas virtuais em uma moderna plataforma de infraestrutura de nuvem híbrida.

Artigos relacionados