Diferenças entre containers e máquinas virtuais (VMs)
Os containers Linux® e as máquinas virtuais são ambientes de computação empacotados que combinam vários componentes de TI e os isolam do restante do sistema. As principais diferenças entre eles tema ver com escala e portabilidade.
- Geralmente, os containers são medidos em megabyte. Eles contêm, no máximo, a aplicação e os arquivos necessários para executá-la. Além disso, eles costumam ser usados para empacotar funções individuais que realizam tarefas específicas, os famosos microsserviços. Como são leves e têm um sistema operacional compartilhado, os containers são muito fáceis de migrar entre vários ambientes.
- As máquinas virtuais são medidas em gigabyte. Eles costumam ter seu próprio sistema operacional, o que possibilita a execução simultânea de várias funções com uso intenso de recursos. Por terem um número maior de recursos à disposição, as máquinas virtuais são capazes de abstrair, dividir, duplicar e emular por inteiro servidores, sistemas operacionais, desktops, bancos de dados e redes.
Para comparar containers e máquinas virtuais temos que ir além das diferenças tecnológicas: é preciso contrapor as novas práticas de TI e as arquiteturas de TI tradicionais.
As novas práticas de TI (desenvolvimento nativo em nuvem, CI/CD e DevOps) existem graças à divisão das cargas de trabalho nas menores unidades úteis possíveis, que geralmente são uma função ou um microsserviço. Essas unidades são melhor empacotadas em containers. Assim, várias equipes podem trabalhar em partes separadas de uma aplicação ou serviço sem interromper ou pôr em risco o código empacotado em outros containers.
Nas arquiteturas de TI tradicionais (monolíticas e legadas), todos os elementos de uma carga de trabalho são mantidos em um arquivo grande que não pode ser dividido. Por isso, ele precisa ser empacotado como uma unidade completa em um ambiente maior, frequentemente uma máquina virtual. Era comum criar e executar uma aplicação inteira dentro de uma máquina virtual, mesmo sabendo que ao armazenar todo o código e dependências, ela ficava grande demais, e isso poderia gerar falhas em cascata e downtime durante as atualizações.
Qual é a opção ideal para mim?
Isso depende do que você precisa: uma instância pequena de algo que possa ser transferido com facilidade (containers) ou uma alocação semipermanente de recursos de TI personalizados?
Como os containers são pequenos e leves, é possível transferi-los com facilidade entre sistemas bare-metal e nuvens públicas, privadas, híbridas e multiclouds. Eles também são o ambiente ideal para implantar aplicações nativas em nuvem modernas. Essas aplicações são conjuntos de microsserviços projetados para proporcionar uma experiência consistente de desenvolvimento e gerenciamentoautomatizado em ambientes de nuvem pública, privada, híbrida e multicloud. Com as aplicações nativas em nuvem, você acelera a otimização das aplicações que você já possui, a criação de novas e a conexão entre todas elas. A desvantagem é que os containers precisam ser compatíveis com o sistema operacional subjacente. Em comparação com as máquinas virtuais, os containers são mais apropriados para:
- Criar aplicações nativas em nuvem
- Empacotar microsserviços
- Adotar práticas de DevOps e CI/CD
- Transferir projetos escaláveis entre diversas infraestruturas de TI com o mesmo sistema operacional
Em comparação com um container, é possível executar muito mais operações com as máquinas virtuais. É por isso que elas eram, e ainda são, o método tradicional de empacotamento de cargas de trabalho monolíticas. No entanto, essa funcionalidade ampliada diminui bastante a portabilidade das máquinas virtuais, já que elas dependem do sistema operacional, da aplicação e das bibliotecas. Em comparação com os containers, as máquinas virtuais 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
Virtualização
O hipervisor é um software que separa os recursos das respectivas máquinas físicas para que eles possam ser particionados e dedicados às máquinas virtuais. Quando o usuário emite uma instrução de máquina virtual que exige mais recursos do ambiente físico, o hipervisor retransmite a solicitação ao sistema físico e armazena as mudanças em cache. As máquinas virtuais são similares aos servidores físicos e agem como eles, o que pode multiplicar as desvantagens de grandes infraestruturas de sistema operacional e das dependências da aplicação. Na maioria das vezes, essas infraestruturas não são necessárias para executar uma aplicação ou microsserviços.
Containers
Os containers armazenam um microsserviço ou aplicação, além de todos os elementos necessários para executá-los. Tudo que eles contêm é mantido em um recurso chamado de imagem: um arquivo baseado em código que inclui todas as bibliotecas e dependências. Pense nesses arquivos como uma instalação da distribuição Linux, já que a imagem inclui pacotes RPM e arquivos de configuração. Como os containers são muito pequenos, geralmente há centenas deles levemente acoplados. É por isso que as plataformas de orquestração de containers, como o Red Hat OpenShift e o Kubernetes, são usadas para provisioná-los e gerenciá-los.
Por que escolher a Red Hat?
Porque há muito tempo oferecemos suporte ao desenvolvimento em containers e à virtualização. Contribuímos com as comunidades do oVirt e da KVM desde seus lançamentos. Além disso, somos o segundo maior colaborador das bases de código Docker e Kubernetes. Também investimos no futuro dessas tecnologias. Com nossa participação no desenvolvimento da virtualização nativa de containers, do KubeVirt e da infraestrutura hiperconvergente, estamos aprimorando a forma como os containers e as máquinas virtuais funcionam simultaneamente em um mesmo sistema de TI.