Qual a diferença entre contêineres e máquinas virtuais?

Contêineres e máquinas virtuais são tecnologias que tornam as aplicações independentes de seus recursos de infraestrutura de TI. Um contêiner é um pacote de código de software que contém o código de uma aplicação, suas bibliotecas e outras dependências. A conteinerização torna suas aplicações portáteis, para que o mesmo código possa ser executado em qualquer dispositivo. Uma máquina virtual é uma cópia digital de uma máquina física. Você pode ter várias máquinas virtuais com seus próprios sistemas operacionais individuais em execução no mesmo sistema operacional host. Além disso, você pode criar uma máquina virtual que contém tudo o que é necessário para executar sua aplicação.

Onde são usados contêineres e máquinas virtuais?

Tanto contêineres quanto máquinas virtuais são tecnologias de implantação. No ciclo de vida de desenvolvimento do software, a implantação é o mecanismo que faz que uma aplicação execute com eficiência no servidor ou no dispositivo. A aplicação requer vários componente de software adicionais, chamados dependências, que são intimamente relacionadas ao sistema operacional subjacente do servidor. Todas essas diferentes camadas de software entre o código da aplicação e o dispositivo físico são chamadas ambiente da aplicação.

Desafios na implantação de software

Normalmente, as organizações precisam implantar aplicações em vários ambientes (por exemplo, desenvolver no ambiente Linux e testar no Windows) antes de lançar novos recursos. Mover a aplicação entre ambientes pode resultar em erros e falhas, o que reduz a produtividade, devido a dependências ignoradas. Ao mesmo tempo, construir e testar a aplicação em um único ambiente limita sua utilidade. Veja alguns exemplos:

  • Poderá ser preciso desenvolver diferentes versões para usuários de diferentes sistemas operacionais
  • Os administradores do sistema podem atualizar e manter todos os ambientes de maneira uniforme, aumentando os custos de desenvolvimento
  • Pode ser desafiador migrar as aplicações de datacenters on-premises para a nuvem ou entre diferentes ambientes de nuvem

Propósito das máquinas virtuais

Historicamente, a tecnologia de máquina virtual foi desenvolvida para o uso eficiente a capacidade de hardware físico e o poder de processamento em constante ampliação. Executar um único ambiente de aplicação em um único servidor físico subutilizada os recursos de hardware. Máquinas virtuais permitem que as organizações instalem vários sistemas operacionais e criem vários ambientes na mesma máquina física.

Propósito dos contêineres

Contêineres foram criados para empacotar e executar aplicações de forma previsível e repetível em vários ambientes. Em vez de recriar o ambiente, você empacota a aplicação para executar em todos os tipos de ambiente físico ou virtual. Isso se assemelha a colocar um astronauta em uma roupa espacial, em vez de recriar a atmosfera da Terra em outro planeta.

Semelhanças entre contêineres e máquinas virtuais

Contêineres e máquinas virtuais permitem o isolamento completo da aplicação, de forma que seja possível executá-lá em vários ambientes. Eles virtualizar ou abstraem a infraestrutura subjacente, para que os usuários não precisem se preocupar com isso. Eles também permitem empacotar a infraestrutura do software em um único arquivo, chamado arquivo de imagem. É possível usar o arquivo de imagem para definir e executar rapidamente sua aplicação em qualquer lugar. Além disso, você também pode usar processos de software para gerenciar configurações do sistema ou escalar para gerenciar milhares de aplicações de uma vez. No entanto, a função e a extensão do uso de contêineres e máquinas virtuais variam dependendo do local e da forma de implantação da aplicação.

Principais diferenças: contêineres vs. máquinas virtuais

Contêineres virtualizam o sistema operacional para que a aplicação possa executar de forma independente em qualquer plataforma. Máquinas virtuais vão além, para virtualizar máquinas físicas, para que você possa usar recursos de hardware de forma eficiente. Apresentamos mais algumas diferenças abaixo.

Como funcionam

A tecnologia em contêiner envolve a criação de pacotes de software autossuficientes com performance consistente, independentemente das máquinas em que são executados. Os desenvolvedores de software criam e implantam imagens de contêiner, ou seja, arquivos que contêm as informações necessárias para executar uma aplicação. Imagens de contêiner são somente leitura e não podem ser alteradas pelo sistema do computador.

A tecnologia de máquina virtual envolve a instalação de software de virtualização em um servidor ou computador físico. O computador físico é chamado de host e a máquina virtual é chamada de convidado. Você pode configurar e atualizar os sistemas operacionais convidados e as aplicações conforme necessário sem afetar o sistema operacional do host.

Tecnologia do núcleo

Máquinas virtuais usam hipervisores que comunicam entre o sistema operacional convidado e o host. O hipervisor coordena o compartilhamento de recursos, para que a máquina virtual execute de forma isolada junto de várias outras no mesmo hardware.

Contêineres, por outro lado, usam um mecanismo ou tempo de execução de contêiner. Ele é um software que atua como um agente intermediário entre os contêineres e o sistema operacional, fornecendo e gerenciando os recursos necessários para a aplicação. Docker é o mecanismo de contêiner de código aberto mais popular.

Tamanho

Arquivos de imagem de máquina virtual são maiores em tamanho (vários GB), pois contém seu próprio sistema operacional. Recursos aumentados significa que você pode duplicar, dividir, abstrair e emular servidores, bancos de dados, áreas de trabalho e redes inteiras. Arquivos de contêiner são mais leves e podem ser medidos em MB. Contêineres empacotam apenas os recursos necessários para executar uma única aplicação.

Quando usar contêineres vs. máquinas virtuais

Apresentamos alguns fatores a serem considerados ao escolher entre máquinas virtuais e contêineres para a implantação de aplicações.

Configuração do ambiente

As máquinas virtuais dão aos desenvolvedores mais controle sobre o ambiente da aplicação. Eles podem instalar manualmente o software do sistema, fazer instantâneos dos estados de configuração e restaurá-los a um estado anterior se necessário. Elas são úteis para ideação e experimentação ou para testar diferentes ambientes para melhorar a performance da aplicação.

Os contêineres fornecem definições estáticas das configurações depois que as melhores foram selecionadas.

Velocidade de desenvolvimento do software

Máquinas virtuais são sistemas de pilha completa e podem ter construção e regeneração trabalhosas. Qualquer modificação demora para ser validada e é necessário regenerar o ambiente.

Contêineres são a melhor escolha se você deseja construir, testar e lançar novos recursos com frequência. Como eles incluem apenas software de alto nível, são rápidos para modificar e fazer iterações.

Escalabilidade

Máquinas virtuais ocupam mais espaço de armazenamento e requerem o provisionamento de mais hardware em seu datacenter on-premises. Alternar para instâncias na nuvem reduz custos, mas migrar todo o ambiente traz desafios próprios.

Contêineres ocupam menos espaço e são mais fáceis de escalar. Mais importante, contêineres fornecem controle granular da escalabilidade da aplicação ao permitir o uso de microsserviços. Microsserviços são uma abordagem arquitetônica e organizacional do desenvolvimento de software na qual o software consiste em pequenos serviços independentes que se comunicam usando APIs bem definidas. Contêineres permitem escalar microsserviços individuais se necessário.

Leia sobre microsserviços »

Leia sobre APIs »

Resumo das diferenças: contêiner vs. máquina virtual

Características

Contêiner

Máquina virtual

Definição

Um pacote de código de software que contém o código de um aplicativo, suas bibliotecas e outras dependências que fazem o ambiente de execução da aplicação.

Réplica digital de uma máquina física. Particiona o hardware físico em vários ambientes.

Virtualização

Virtualiza o sistema operacional.

Virtualiza a estrutura física subjacente.

Encapsulamento

Camada de software sobre o sistema operacional necessária para executar a aplicação ou o componente da aplicação.

Sistema operacional, todas as camadas de software acima dele, várias aplicações.

Tecnologia

Mecanismo de contêiner coordena com o sistema operacional subjacente para obter recursos. 

O hipervisor coordena com o hardware ou sistema operacional subjacente. 

Tamanho

Mais leve (pense em termos de MB).

Muito maior (pense em termos de GB).

Controle

Menos controle do ambiente fora do contêiner.

Mais controle do ambiente inteiro.

Flexibilidade

Mais flexível. Você pode migrar rapidamente entre ambientes on-premises e centrados na nuvem.

Menos flexível. A migração tem desafios.

Escalabilidade

Altamente escalável. Escalabilidade granular possível com microsserviços.

Escalar pode ter custo elevado. É necessário alternar de instâncias on-premises para a nuvem para escalar com bom custo-benefício.

  Saiba mais sobre Contêineres Saiba mais sobre Máquinas virtuais

 

Como a AWS pode ajudar com seus contêineres e máquinas virtuais?

A AWS tem vários serviços para oferecer suporte às suas necessidades de implantação de aplicação. Veja alguns exemplos:

  • O AWS App2Container é uma ferramenta de conteinerização que permite aos desenvolvedores de software modernizar aplicações herdadas. Os desenvolvedores usam o AWS App2Container para transformar aplicações Java e .NET em aplicações conteinerizadas.
  • O Amazon Elastic Container Registry (Amazon ECR) é um repositório de contêiner privado altamente disponível e seguro que facilita o armazenamento e o gerenciamento de imagens do contêiner do Docker.
  • O Amazon Elastic Container Service (Amazon ECS) é um serviço de orquestração de contêineres altamente escalável e de alto desempenho para executar contêineres do Docker na Nuvem AWS.
  • O Amazon Elastic Compute Cloud (Amazon EC2) permite exercer controle granular sobre suas instâncias na nuvem e escolher os processadores, o armazenamento e a rede que quiser. 
  • O AWS Fargate é uma tecnologia para o Amazon ECS que permite executar contêineres do Docker sem implantar ou gerenciar a infraestrutura.
  • O VMWare Cloud na AWS permite simplificar e acelerar a migração de workloads de missão crítica de máquinas virtuais on-premises para a Nuvem AWS.

Comece a usar a virtualização e a conteinerização criando uma conta da AWS gratuita hoje mesmo.

Próximas etapas com a AWS

Comece a criar com contêineres

Saiba como começar a usar contêineres na AWS

Saiba mais 
Comece a criar com máquinas virtuais

Saiba como começar a usar máquinas virtuais na AWS

Saiba mais