O que são containers
Esse é o meu primeiro artigo no CapivaraCode, então quero falar de algo que me fez estudar bastante desde 2016, e nada melhor que começar por essa revolução chamada container!
A grosso modo container são processos rodando isoladamente em um sistema, e o que é isso? Podemos ter duas versões diferentes de um webserver (apache, nginx e etc) rodando isoladamente na mesma maquina sem nenhum conflito entre eles (o interesse disso vamos ver mais a frente).
Agora porque eles são distribuídos em imagens? Para resolver exatamente o problema de conflito de dependência, imagina ter duas versões de uma aplicação, o CapivaraCode-V1 que tem como dependência a libX.1.2.3 e o CapivaraCode-V2 depende da libX.2.3.1, e no mesmo sistema operacional não podemos ter ambos os sistemas instalados, porque o libX.1.2.3 não instala se o libX.2.3.1 estiver presente, então isolamos ambos os softwares em imagens (podemos dizer que estamos empacotando-os) e colocamos eles para rodar isoladamente na mesma maquina, dessa forma economizando recurso e etc.
Porém essa não é a única vantagem, por exemplo, ambas as imagens do CapivaraCode depende de imagem base do DebianX, onde vai ter os demais softwares necessários para as nossas aplicações iniciais, uma vez que cria esse empacotamento você pode pensar que vamos ter a imagem das aplicações mais a “imagem base” multiplicada por dois, mas não é dessa forma que vai funcionar, como a imagem do debian é igual para ambos ela só será baixada uma única vez, economizando a sua banda larga e o seu tempo ao usa-las.
Porque não rodar esse tal de CapivaraCode V1 e V2 em maquina diferentes e problema resolvido? Aí que entra mais um trunfo da contairenização da porra toda. Para ter esse software vai precisar de duas máquinas, que sejam máquinas virtuais, ambas as máquinas vão precisar de um sistema operacional, IP na rede, abertura de firewall, uma administração.
Ambos os softwares não precisam de um sistema operacional, IP, firewall e etc? Porque não facilitar essa administração por um e trabalhar apenas nas imagens dos containers que você vai distribuir?
Se comparar as imagens a abaixo veja as camadas que temos para máquinas virtualizadas e containers.
Podemos ver que a emulaçãoo de hardware não é tão leve e ágil como podemos ter em containers, o tempo de boot de uma maquina virtual pode ser de alguns minutos dependendo do serviço instalado, por outro lado, com containers esse tempo pode cair para a casa dos segundos.
Hoje no mercado existem diversas ferramentas que a partir de agora vamos chama-las de runtimes, a mais famosa de todas sem dúvida alguma é o Docker seguido do CRI-O, ContainerD (nativo do kernel linux), LXD e dentre outros, acredite opção não falta.
Docker realmente saiu na frente de muita gente com a facilidade de criação das suas imagens, hoje em 2021 o seu uso caiu, pelo fato de não ser nativo dos sistemas operacionais (existe a necessidade de um daemon rodando) e pela Existência da Open Container Initiative (oci), que é um projeto da Linux Foundation para projetar padrões abertos para virtualização ao nível de sistema operacional, com foco nos containers Linux. Tanto a RedHat e o Docker são membros da OCI e estão constantemente desenvolvendo melhorias como o próprio ContainerD.
Espero que esse pequeno artigo tenha acrescentado algo.
Continue a leitura:
https://www.docker.com/resources/what-container
https://www.redhat.com/pt-br/topics/containers/whats-a-linux-container