Se você começou a aprender sobre ferramentas de virtualização recentemente, pode se perguntar quais são as diferenças nas conversas de tecnologia sobre contêineres e máquinas virtuais (VMs).
Os contêineres se tornaram uma força dominante no desenvolvimento nativo da nuvem; por isso, é importante entender o que eles são e o que não são. Embora os contêineres e as VMs tenham características distintas e exclusivas, eles são semelhantes no sentido de que ambos melhoram a eficiência da TI, oferecem portabilidade de aplicação e aprimoram o DevOps e o ciclo de vida de desenvolvimento de software.
A virtualização é um processo pelo qual o software é usado para criar uma camada de abstração sobre o hardware do computador que permite que os elementos de hardware de um único computador sejam divididos em vários computadores virtuais.
O software usado é chamado de hipervisor, uma pequena camada que permite que vários sistemas operacionais sejam executados lado a lado, compartilhando os mesmos recursos físicos de computação. Quando um hipervisor é usado em um computador ou servidor físico (também conhecido como Bare Metal Server) em um data center, ele permite que o computador físico separe o sistema operacional e as aplicações do hardware. Em seguida, ele pode se dividir em várias "máquinas virtuais" independentes.
Assista ao vídeo para ver mais de perto a tecnologia de virtualização:
As máquinas virtuais (VMs) são uma tecnologia para criar ambientes de computação virtualizados. Eles já existem há algum tempo e são considerados a base da primeira geração da computação em nuvem.
Simplificando, uma máquina virtual é uma emulação de um computador físico. As VMs permitem que as equipes executem o que parecem ser várias máquinas, com vários sistemas operacionais, em um único computador. As VMs interagem com computadores físicos usando camadas de software leves chamadas hipervisores. Os hipervisores podem separar VMs umas das outras e alocar processadores, memória e armazenamento entre elas.
As VMs também são conhecidas como virtual servers, instâncias de virtual servers e virtual servers privados.
Contêineres são uma forma mais ágil de lidar com a virtualização. Como eles não usam um hipervisor, você pode aproveitar o provisionamento mais rápido de recursos e a disponibilidade mais rápida de novas aplicações.
Em vez de executar uma máquina virtual inteira, a conteinerização reúne tudo o que é necessário para executar uma única aplicação ou microsserviço (juntamente com as bibliotecas de tempo de execução necessárias para a execução). O contêiner contém todo o código, suas dependências e até o próprio sistema operacional. Isso permite que as aplicações sejam executadas em praticamente qualquer lugar — um computador desktop, uma infraestrutura de TI tradicional ou na nuvem.
Os contêineres usam uma forma de virtualização de sistema operacional (SO). Simplificando, eles aproveitam as funcionalidades do sistema operacional host para isolar processos e controlar o acesso dos processos a CPUs, memória e espaço na mesa.
Os contêineres existem há décadas. No entanto, o consenso comum é que a era moderna dos contêineres começou em 2013 com a introdução do Docker, uma plataforma de código aberto para construir, implementar e gerenciar aplicações em contêineres. Saiba mais sobre o Docker, os contêineres do Docker, os Dockerfiles (o arquivo de compilação da imagem do contêiner) e como o ecossistema evoluiu com a tecnologia de contêineres na última década.
Na virtualização tradicional, um hipervisor virtualiza o hardware físico. O resultado é que cada máquina virtual contém um sistema operacional convidado, uma cópia virtual do hardware do qual o sistema operacional precisa para ser executado e uma aplicação e suas bibliotecas e dependências associadas. VMs com sistemas operacionais diferentes podem ser executadas no mesmo servidor físico. Por exemplo, uma VM VMware pode ser executada ao lado de uma VM Linux, que é executada ao lado de uma VM Microsoft etc.
Em vez de virtualizar o hardware subjacente, os contêineres virtualizam o sistema operacional (normalmente Linux ou Windows) para que cada contêiner individual contenha somente a aplicação e suas bibliotecas e dependências. Os contêineres são pequenos, rápidos e portáteis porque, ao contrário de máquinas virtuais, os contêineres não precisam incluir um sistema operacional convidado em cada instância e podem, em vez disso, simplesmente Aproveite as funcionalidades e os Recursos do sistema operacional host.
Assim como as máquinas virtuais, os contêineres permitem que os desenvolvedores melhorem a utilização da CPU e da memória das máquinas físicas. Onde os contêineres vão ainda mais longe é que, como eles também permitem a arquitetura de microsserviços, os componentes das aplicações podem ser implementados e escalonados de forma mais granular. Essa é uma alternativa atraente em vez de ter que escalar uma aplicação monolítica inteira porque um único componente está tendo problemas com carga.
Junte-se a Nigel Brown enquanto ele analisa mais de perto como os contêineres diferem das VMs:
Embora ainda existam muitos motivos para usar VMs, os contêineres oferecem um nível de flexibilidade e portabilidade que é perfeito para o mundo de multinuvem. Quando os desenvolvedores criam novas aplicações, eles podem não saber todos os lugares que elas precisarão ser implementadas.
Hoje, uma organização pode executar a aplicação em sua nuvem privada, mas amanhã poderá ser necessário implementá-la em uma nuvem pública de um provedor diferente. A conteinerização de aplicações oferece às equipes a flexibilidade necessária para lidar com os diversos ambientes de software da TI moderna.
Os contêineres também são ideais para automação e pipelines de DevOps, incluindo a implementação de integração contínua e implantação contínua (CI/CD).
Apesar dos muitos benefícios dos contêineres e dos casos de uso em que eles são a melhor opção, eles vêm com alguns desafios próprios.
As aplicações corporativas de grande porte podem incluir um grande número de contêineres, e o gerenciamento de contêineres apresenta alguns problemas sérios para as equipes. Como se pode ter visibilidade sobre o que está sendo executado e onde? Como se lida com questões cruciais, como segurança e conformidade? Como se gerencia de forma consistente suas aplicações?
A maioria das empresas está recorrendo a soluções de código aberto, como o Kubernetes, e o Kubernetes já está executando contêineres na maioria das situações para muitas organizações.