Do blog

O que são Containers e porque são diferentes de VMS

Docker

Container consiste em um runtime (configuração entre hardware e software) que, como o nome diz, containeriza uma aplicação e todas suas dependências, bibliotecas, arquivos de configuração e outros binários necessários em um único pacote, chamado de imagem.

Ao criar uma imagem de uma aplicação, diferenças entre distribuições de Sistemas Operacionais e outras camadas da infraestrutura são abstraídas, resolvendo um dos grandes problemas sobre como rodar software: como fazer com que uma aplicação funcione com confiabilidade em diferentes ambientes.

Quais problemas os containers resolvem

  1. Tempo de Entrega: Imagens podem ser criadas e excluídas dentro de segundos, ou seja, elas podem ser instanciadas de maneira “just in time”, tendo em vista que não é necessário a inicialização de todo um S.O. para cada novo container.

  2. Portabilidade: Containers isolam serviços de uma aplicação, criando imagens para cada um desses serviços. Com isso, se torna possível mover suas aplicações livremente entre ambientes, até mesmo para servidores com Sistemas Operacionais diferentes.

  3. Sistema de configuração: As alterações podem ser feitas individualmente em cada container de forma automatizada sem a necessidade de reconstruir o aplicativo inteiro.

Diferença entre Containers e Máquinas Virtuais

Existem muitas diferenças entre containers e Máquinas Virtuais (VMs), aqui estão as maiores:

Sistema Operacional

A arquitetura de containers e máquinas virtuais diferem em termos de Sistema Operacional no sentido de que containers são hospedados em um servidor com um único Sistema Operacional (chamado de S.O. host) compartilhado entre eles.

Máquinas virtuais, por outro lado, tem o S.O. host do servidor físico onde estão, e um S.O. guest em cada uma das VMs. O S.O. guest é independente do S.O. host, podendo ser diferente um do outro.

Em termos práticos, containers são melhor utilizados quando você quer rodar aplicações em um mesmo kernel. No entanto, se você tem aplicações ou serviços que precisam rodar em diferentes distribuições de Sistema Operacional, VMs geralmente são necessárias.

O compartilhamento do S.O. host entre containers fazem com que eles se tornem muito leves, o que diminui muito o tempo de boot. Por conta disso, o overhead (quantidade de recursos físicos necessários no servidor) para gerenciar um sistema de container é muito menor quando comparado a VMs.

0 b89KkENoegwwyteA

Segurança

Como o kernel do host é compartilhado entre os containers, a tecnologia do container tem acesso os subsistemas do kernel. Como resultado, uma vulnerabilidade na aplicação pode comprometer todo o servidor host. Por conta disso, acesso root a aplicações não é recomendado.

Por outro lado, VMs são instâncias únicas com seu próprio kernel e configurações de segurança. Elas podem, portanto, rodar aplicações que precisam de maiores permissões.

Portabilidade

Cada imagem de um container é um pacote independente que roda uma aplicação ou parte dela. Como não é necessário um S.O. guest separado, essa imagem pode ser movida entre diferentes plataformas.

Os containers podem ser iniciados ou parados em questão de segundos, quando comparado a VMs, devido à sua arquitetura leve. Isso faz com que seja mais fácil e rápido implementar containers em servidores.

VMs, por outro lado, são instâncias isoladas rodando seu próprio Sistema Operacional. Elas não podem ser movidas entre plataformas sem que um processo de migração seja feito. Ainda assim, podem existir erros de compatibilidade.

Para fins de desenvolvimento da aplicação ou do serviço onde aplicações devem ser desenvolvidas e testadas em diferentes ambientes, containers se mostram, portanto, a melhor opção.

Performance

Containers são significativamente mais leves do que VMs, necessitando portanto de menos recursos.

Como resultado, containers inicializam muito mais rapidamente, visto que as máquinas virtuais precisam carregar todo um Sistema Operacional para serem inicializadas.

Uma outra grande diferença é que a utilização de recursos como CPU, memória, I/O, etc, variam conforme o load ou tráfego nele. Diferente de VMs, não é necessário alocar recursos permanentes em um container. Por conta disso, é possível dizer que essa tecnologia é mais escalável.

Conclusão

Containers são tidos como a evolução das VMs, tendo sido adotados por empresas de todos os tamanhos.

Sua flexibilidade e menor necessidade de recursos torna essa tecnologia uma opção mais completa na hora de implementar e gerenciar suas aplicações.

Apesar de ser uma tecnologia menos madura do a virtualização convencional, tem se desenvolvido rapidamente e já é a escolha padrão para grande parte das cargas de trabalho de grandes empresas, como Google e Walmart.

Ir ao blog