Aula 2 - Conteinerização
Aula 2 - Conteinerização
Aula 2 - Conteinerização
Nesta aula, vamos ter a oportunidade de conhecer uma tecnologia muito requisitada no
mercado de trabalho atualmente: os contêineres.
Introdução da aula
Você já ouviu falar de uma das implementações mais utilizadas de contêineres no mundo, o
Docker? Se não, aproveite a oportunidade. Sabia que há várias vagas de emprego requisitando
conhecimentos dessa implementação aqui no Brasil e mundo afora? Não perca o foco!
Você se lembra da sua entrevista para a tão cobiçada vaga na área de DevOps? Avançando mais
uma etapa, o coordenador pergunta se, na sua opinião, existem tecnologias similares, porém,
mais eficientes que a virtualização, para rodar aplicações sem interferir no sistema operacional
da máquina física, e você logo se lembra dos contêineres.
Sendo assim, deverá criar um relatório técnico indicando o uso de uma tecnologia atual que
traga vantagens e diminua o consumo de recursos para a criação de um novo ambiente que
execute um sistema ERP que será implementado daqui a alguns meses na empresa. Os ERPs
são sistemas integrados de gestão empresarial, que interligam todos os dados e processos de
uma empresa dentro do sistema.
Portanto é um dos mais importantes para um bom funcionamento de uma companhia, o que
quer dizer que, quanto melhor for executado, mais pontos o profissional que planejou sua
execução vai ganhar com os seus superiores. Então, chegou a hora de impressionar o
coordenador em busca da vaga que você almeja, está pronto?
Conceito de conteinerização
Uma das tecnologias mais populares que temos atualmente é o uso de contêineres para a
execução de sistemas dos mais variados tipos. Isso ocorre devido à facilidade e à flexibilidade
que advêm do uso dos mesmos. O contêiner funciona como uma tecnologia que dá o suporte
para o funcionamento de uma aplicação e pode ser considerado a emulação de nossa
aplicação. Quando a aplicação é executada através de um contêiner, ela tem todas as
bibliotecas e os elementos necessários para o funcionamento disponíveis dentro do contêiner.
Uma maneira simples para entender o que são os chamados contêineres é imaginar que eles
permitem a criação de ambientes virtuais isolados e independentes para serem utilizados por
aplicações, similar ao resultado do uso de máquinas virtuais. Entretanto, um grande diferencial
está no fato de que os contêineres são mais leves que as máquinas virtuais, por possuírem uma
arquitetura mais otimizada.
______
Assimile
O contêiner traz muitas facilidades e é considerado uma das principais tendências de TI. Sua
utilização simplifica a aplicação da metodologia DevOps e facilita o desenvolvimento. Grandes
empresas, como a Google, usam essa tecnologia.
______
Conforme pode ser visto na figura a seguir, uma grande vantagem de contêineres em relação às
máquinas virtuais é que não há, obrigatoriamente, a necessidade de instalar um sistema
operacional completo, visto que as plataformas de conteinerização aproveitam bibliotecas
compartilhadas com o sistema operacional hospedeiro. Por essa razão, os contêineres ocupam
menos espaço em disco e consomem menos RAM e processamento que as máquinas virtuais
e, assim, possibilita a utilização de mais contêineres em uma mesma máquina física,
favorecendo o uso de uma arquitetura mais modular para as aplicações.
Comparação das arquiteturas de máquinas virtuais versus contêineres. Fonte: elaborada pelo autor.
______
Reflita
Agora que conhecemos algumas vantagens dos contêineres em relação às máquinas virtuais,
quais benefícios uma empresa que executa aplicações em máquinas virtuais poderia adquirir
migrando a execução de suas aplicações para contêineres? Você acredita que seria benéfica
essa migração?
______
Duas das principais características a favor da conteinerização são o baixo acoplamento entre os
contêineres e a facilidade de migração entre provedores de cloud computing. Ambas se devem
ao fato de que a ideia do contêiner é “empacotar” a sua aplicação em um módulo que é
facilmente instalado em qualquer sistema operacional que suporte o uso de contêineres (e os
principais sistemas operacionais utilizados em servidores possuem esse suporte).
Porém, para começar a ter ideia do que se trata, quando falamos do Docker, estamos na
realidade falando de uma empresa – chamada Docker – que foi responsável pela popularização
dos contêineres, por meio de eventos e divulgação de material técnico. Essa companhia criou
sua própria implementação que, coincidentemente, é chamada de Docker, cuja instalação,
configuração e gerenciamento (e, consequentemente, curva de aprendizado) é relativamente
mais simples comparando com outras implementações (DOCKER, 2018).
Linux Container
Existem implementações que podem ser consideradas contêineres de sistema, por exemplo, os
Linux. Essas tecnologias têm um comportamento muito parecido ao de uma máquina virtual,
mas, na verdade, são equivalentes a novas instâncias do sistema utilizando todas as técnicas
disponíveis para isso. Os contêineres Linux funcionam compartilhando o kernel da máquina
real onde estão em funcionamento. Uma limitação encontrada nos contêineres é que, quando
estão compartilhando o kernel da máquina física ou até mesmo virtual em que estão
hospedados e em execução, tratam-se de contêineres Linux rodando em máquinas Linux com o
mesmo kernel do host, ou seja, mesmo que você substitua todas as bibliotecas e frameworks
utilizados pelo seu contêiner, o kernel será sempre o mesmo do host que o hospeda.
Segundo Linux Container (2018), o projeto Linux container é o guarda-chuva por trás do Linux
Containers, que possuem as gerações LXC, LXD e LXCFS. O LXC é uma interface de espaço de
usuário para os recursos de contenção de kernel do Linux. Por meio de uma API poderosa e
ferramentas simples, permite que usuários do Linux criem e gerenciem facilmente contêineres
de sistema ou aplicativo. O LXD é um gerenciador de contêineres de próxima geração, que
oferece uma experiência de usuário semelhante às máquinas virtuais, mas usando contêineres
do Linux. Já o LXCFS é um sistema de arquivos simples do userspace projetado para contornar
algumas limitações atuais do kernel do Linux.
______
Exemplificando
Podemos até mesmo testar um ambiente com contêineres Linux pelo Portal Linux
Containers (LINUX CONTAINER, [s.d.]). Esse portal disponibiliza toda a documentação com
comandos utilizados no LXC e no LXD. Conforme mencionado, podemos praticar alguns
comandos e testar ambos os ambientes através do menu “try it online”, como podemos
observar na figura abaixo:
Área de treinamento do portal Linux Containers. Fonte: captura de tela do portal Linux Containers.
Dentro da opção de treinamentos, é possível usar o “Terminal”, disponível para executar alguns
comandos e observar seu comportamento. Utilizamos o comando abaixo para criar o contêiner
através da implementação Linux Containers:
Criando um contêiner por meio do portal Linux Containers. Fonte: captura de tela do portal Linux Containers.
Feito isso, é possível consultar a lista de contêineres criados no terminal utilizando o comando
abaixo:
lxc list
Pode-se observar na figura a seguir que o contêiner criado anteriormente já aparece como
resultado em nossa listagem. Além disso, informações como o status da máquina e os números
de seus respectivos IPV4 e IPV6 também aparecem, como podemos ver a seguir:
Listando os contêineres criados através do portal Linux Containers. Fonte: captura de tela do portal Linux Containers.
lxc start
lxc stop
lxc delete
Além das informações do contêiner exibidas através da listagem que foi vista anteriormente,
podemos observar uma série de informações sobre nosso contêiner como consumo de
memória RAM, consumo de redes, entre outros dados. Para isso, utilizamos o comando de
sintaxe a seguir:
Caso o sistema possua uma arquitetura monolítica, ou seja, uma forte dependência entre esses
elementos, será muito difícil substituir alguns dos elementos citados anteriormente sem causar
uma interrupção completa no sistema. Por outro lado, em uma arquitetura baseada em
microsserviços, esses componentes têm um baixo acoplamento entre si, ou seja, o grau de
dependência entre os componentes é baixo, de forma que, caso você tenha de fazer uma
substituição, terá um impacto bem menor na indisponibilidade do seu sistema, e os
contêineres serão artefatos fundamentais para atingir esse baixo acoplamento, pois cada um
dos elementos pode ser criado e implantado em um contêiner separado.
______
Assimile
______
O Swarm foi integrado ao Docker a partir da versão 1.12.0, com o chamado swarm mode, em
junho de 2016, conforme noticiado no blog oficial do Docker (DOCKER, [s.d.]) A figura abaixo
ajudará a entender os componentes do Swarm e como eles estão relacionados aos
contêineres.
Arquitetura do Swarm do Docker. Fonte: elaborada pelo autor.
Na figura acima, o retângulo destacado em lilás representa o que o Docker chama de Swarm,
que nada mais é que um cluster (conjunto de computadores interligados que funcionam como
um grande sistema), formado por vários nós, que podem rodar uma aplicação – no exemplo, o
servidor web Nginx – de maneira integrada e distribuída. Para que os nós possam estar
integrados, de maneira que, caso uma instância do Nginx falhe por conta de um dos nós
escravos estar indisponível, esta ser automaticamente instanciada em outro nó, é necessário
que exista um nó mestre que faça essa gestão.
Podem existir vários nós com a função de mestre do cluster (que o Docker chama de manager),
para que, caso o nó mestre falhe, outro nó mestre assuma seu lugar. Os nós escravos (que o
Docker chama de worker) rodam a quantidade de instâncias (frequentemente chamadas de
réplicas) solicitadas pelo nó mestre e, para tal, é preciso que exista um contêiner “dentro” de
cada nó escravo, o que está representado pelo retângulo laranja.
Conclusão
Continuando o processo seletivo para aquela tão cobiçada vaga na área de DevOps, o
coordenador o submete a um teste, no qual você deve criar um relatório para indicar uma
tecnologia que otimize o desempenho de um sistema ERP, que logo será implementado na
empresa.
Depois de analisar o cenário de tecnologias atuais, foi decidido que criar um ambiente com
contêineres é a melhor opção para impressionar o coordenador, devido à popularidade e às
vantagens dessa tecnologia. Portanto, para justificar essa escolha, abaixo estão citadas as
vantagens que o uso de contêiner deve trazer na execução de um sistema de ERP:
Através do apontamento destas vantagens, o coordenador terá a certeza de que você entende
muito bem do que está falando e com certeza vai avançá-lo para a próxima etapa da entrevista!
Chegamos ao fim da aula e agora você já sabe o que é contêiner e logo mais estará apto para
utilizar essa importante tecnologia! Bons estudos!