Contêiner de aplicação
Um modelo alternativo à virtualização baseada em hypervisor é a virtualização baseada em contêiner, que ocorre no nível do sistema operacional (BACHIEGA; SOUZA; BRUSCHI, 2017). Neste caso, um conceito importante é o contêiner de aplicação (Application Container) que pode ser entendido como um componente de software autossuficiente, no sentido em que ele encapsula uma aplicação e todas as suas dependências (como bibliotecas, arquivos de configuração, etc.) (SILVA, 2017). Diferentemente de uma máquina virtual, o contêiner não inclui um sistema operacional. Na verdade, o sistema operacional do servidor é compartilhado entre os contêineres em execução. A Figura 2.2 ilustra o esquema de contêineres em um servidor físico. Com uma ferramenta de gerenciamento de contêineres (container engine), pode-se instanciar vários contêineres em uma única máquina física. O hardware e o sistema operacional dessa máquina são compartilhados entre os contêineres (SILVA, 2017).
Reflita
Os contêineres são amplamente utilizados nos provedores de computação em nuvem, pois a virtualização baseada em contêiner viabiliza mecanismos sofisticados para implantação e replicação de aplicações distribuídas na nuvem. Vários contêineres podem ser rapidamente instanciados em um servidor. É possível que um contêiner com uma aplicação implementada para ambiente Linux possa compartilhar o mesmo servidor que um contêiner com uma aplicação implementada para ambiente Windows? Quais seriam as alternativas para viabilizar esse cenário?
Uma vez que a imagem de uma máquina virtual inclui um sistema operacional, ela é maior que a imagem de um contêiner que envolve somente software no nível de usuário (aplicações, bibliotecas, etc.). Portanto, em termos de desempenho, o uso de contêineres pode oferecer vantagens em relação ao uso de máquina virtuais (SILVA, 2017). Por ser mais leve, um contêiner demora menos tempo para inicializar ou para ser transmitido de um servidor para outro. Entretanto, uma vez que os contêineres compartilham o sistema operacional subjacente, o nível de isolamento e segurança é menor, quando comparado com as máquinas virtuais, que emulam um ambiente computacional completo e independente, com seu próprio sistema operacional.
Assimile
É importante salientar que contêineres e máquinas virtuais não são, necessariamente, tecnologias concorrentes. Na verdade, essas tecnologias podem ser utilizadas de forma complementar para compartilhar a infraestrutura dos provedores entre vários clientes. Isso é possível porque um gerenciador de contêineres, como o Docker (DOCKER, 2019c), pode ser instalado em uma máquina virtual, que então poderia suportar a execução de contêineres. Além disso, existem aplicações para as quais a implantação em máquina virtual é mais interessante, por exemplo, devido a requisitos de segurança. Em outros cenários, a implantação de contêineres é mais indicada, por exemplo, no caso da replicação automática de aplicações web em provedores de Plataforma como Serviço (SILVA, 2017; PEREIRA, 2019).
A principal característica do contêiner é permitir que o ambiente de execução da aplicação seja sempre o mesmo, pois tudo que a aplicação precisa está encapsulada no contêiner, independentemente da plataforma subjacente (DOCKER, 2019). Isso favorece a portabilidade e facilita a replicação da aplicação em vários servidores. Basta, para isso, que um gerenciador de contêiner compatível esteja instalado em cada servidor e uma cópia do contêiner seja copiada e executada em cada um deles. Essa agilidade para replicar aplicações ou migrar aplicações de um servidor para outro é muito importante em um ambiente de computação em nuvem, do qual se espera o escalonamento dinâmico de aplicações.
Exemplificando
Os provedores de computação em nuvem usam diversas tecnologias de contêiner de aplicações para hospedar serviços PaaS e SaaS (BERNSTEIN, 2014). Entre as principais tecnologias de contêineres, podemos citar o LXC (CANONICAL, 2019) e o Docker (DOCKER, 2019). A plataforma Docker se tornou a mais popular para virtualização baseada em contêiner. Um contêiner Docker pode ser definido como “uma unidade de software padronizada” (DOCKER, 2019). A plataforma usa o conceito de imagem, a partir da qual o contêiner é instanciado. A imagem é um arquivo que empacota tudo o que é necessário para executar uma aplicação, por exemplo, código executável, bibliotecas, ferramentas de sistema, configurações, etc. A plataforma Docker oferece, ainda, ferramentas como o Docker Compose para serviços que resultam da composição de vários contêineres; e o Docker Swarm, para gerenciamento de clusters de contêineres distribuídos por várias máquinas físicas. Além disso, o Docker Hub é considerado o maior repositório mundial de imagens de contêineres (DOCKER, 2019b). Nesse repositório, podem ser encontradas imagens de diversas aplicações, ferramentas, SGBDs, entre outros.
A evolução das tecnologias de rede e virtualização foram fundamentais para a consolidação dos provedores de computação em nuvem. Essas tecnologias viabilizaram as principais características dos serviços em nuvem, como:
• Self-service sob demanda.
• Acesso remoto.
• Elasticidade rápida.
