![Como obter alertas de e-mail de login de usuário SSH e root](/f/6fa3c76b1124f9400d861cbf96db6326.png?width=100&height=100)
Com o tempo, conforme a demanda por testes rápidos e implantação de aplicativos cresceu junto com negócios mais rápidos ciclos, as organizações foram compelidas a inovar a fim de acompanhar o ritmo acelerado dos negócios meio Ambiente.
A busca por modernizar aplicativos e construir novos para criar fluxos de trabalho ágeis levou ao conceito de uso de contêineres. A tecnologia de conteinerização é quase tão antiga quanto a virtualização. No entanto, os contêineres não geraram muita empolgação até Docker explodiu em cena em 2013 e despertou um interesse frenético entre desenvolvedores e outros profissionais de TI.
Atualmente, todas as entidades gigantes de tecnologia, como Google, Amazonas, Microsoft, e chapéu vermelho para mencionar que alguns entraram no movimento.
Um dos desafios enfrentados pelos desenvolvedores é a diferença nos ambientes de computação em cada estágio do desenvolvimento de software. Os problemas surgem quando o ambiente de software é diferente de um estágio para o outro.
Por exemplo, um aplicativo pode ser executado perfeitamente em um ambiente de teste usando Python 3.6. No entanto, o aplicativo se comporta de maneira estranha, retorna alguns erros ou bloqueia completamente quando transferido para um ambiente de produção em execução Python 3.9.
Os contêineres entraram em cena para enfrentar esse desafio e garantir que os aplicativos sejam executados de maneira confiável quando movidos de um computador ambiente para o próximo em cada estágio de desenvolvimento de software - do PC dos desenvolvedores até a produção meio Ambiente. E não é apenas o ambiente de software que pode causar tais inconsistências, mas também as diferenças em topologia de rede e políticas de segurança.
UMA recipiente é uma unidade de software isolada que empacota todo o código binário, bibliotecas, executáveis, dependências e arquivos de configuração em um único pacote de forma que o aplicativo funcione sem problemas quando transferido de um ambiente de computação para outro. Ele não vem com uma imagem do sistema operacional, o que o torna leve e facilmente portátil.
Uma imagem de contêiner é um pacote autônomo, leve e executável que agrupa tudo o que é necessário para executar o aplicativo. No tempo de execução, uma imagem de contêiner se transforma em um contêiner. No caso de Docker, por exemplo, uma imagem Docker se torna um contêiner docker quando executada em Docker Engine. Docker é um ambiente de tempo de execução usado para construir aplicativos em contêineres.
Os contêineres são executados de forma totalmente isolada do sistema operacional subjacente e os aplicativos em contêineres sempre serão executados de forma consistente, independentemente do ambiente de computação ou infraestrutura. É por esse motivo que um desenvolvedor pode desenvolver um aplicativo do conforto de seu laptop e implantá-lo prontamente em um servidor.
A consistência e a confiabilidade dos contêineres em execução dão aos desenvolvedores tranquilidade em saber que seus aplicativos serão executados conforme o esperado, independentemente de onde forem implantados.
Uma coisa comum que os contêineres e as máquinas virtuais compartilham é que eles operam em um ambiente virtualizado. A conteinerização, em certo sentido, é uma forma de tecnologia virtualizada. No entanto, os contêineres diferem das máquinas virtuais em mais de um aspecto.
Uma máquina virtual também conhecida como instância virtual ou VM em suma, é uma emulação de um servidor físico ou PC. A virtualização é uma tecnologia que possibilita a criação de máquinas virtuais. O conceito de virtualização remonta ao início dos anos 1970 e lançou as bases para a primeira geração de tecnologia em nuvem.
Na virtualização, uma camada de abstração é criada em cima de um servidor bare-metal ou hardware de computador. Isso possibilita que os recursos de hardware de um único servidor sejam compartilhados entre várias máquinas virtuais.
O software usado para fazer a camada de abstração é conhecido como hipervisor. O hipervisor abstrai a máquina virtual e o sistema operacional convidado do bare metal ou hardware de computador real. Assim, uma máquina virtual fica em cima do hipervisor, o que disponibiliza os recursos de hardware graças à camada de abstração.
As máquinas virtuais executam um sistema operacional completo (sistema operacional convidado) que é independente do sistema operacional subjacente (sistema operacional host) no qual o hipervisor está instalado. O sistema operacional convidado fornece uma plataforma para construir, testar e implantar aplicativos junto com suas bibliotecas e binários.
[ Você pode gostar também: Como instalar o KVM no CentOS / RHEL 8 ]
Existem dois tipos de hipervisores:
este hipervisor é instalado diretamente em um servidor físico ou no hardware subjacente. Não há sistema operacional entre o hipervisor e o hardware do computador, daí o nome da tag metal puro hipervisor. Ele fornece um suporte excelente, pois os recursos não são compartilhados com o sistema operacional do host.
Devido à sua eficiência, os hipervisores Tipo 1 são usados principalmente em ambientes corporativos. Os fornecedores de hipervisor tipo 1 incluem VMware Esxi e KVM.
Isso também é considerado um hipervisor hospedado. Ele é instalado no topo do sistema operacional host e compartilha os recursos de hardware subjacentes com o sistema operacional host.
Os hipervisores tipo 2 são ideais para pequenos ambientes de computação e são usados principalmente para testar sistemas operacionais e pesquisas. Os fornecedores de hipervisor tipo 2 incluem Oracle VirtualBox e VMware Workstation Pro.
As máquinas virtuais tendem a ser enormes em tamanho (podem ocupar vários GBs), lentas para iniciar e parar e devorar muitos recursos do sistema, levando a travamentos e desempenho lento devido a recursos limitados. Assim, uma máquina virtual é considerada volumosa e está associada a altos custos indiretos.
Ao contrário de uma máquina virtual, um contêiner não requer um hipervisor. Um contêiner fica sobre um servidor físico e seu sistema operacional e compartilha o mesmo kernel do sistema operacional, entre outras coisas, como bibliotecas e binários. Vários contêineres podem ser executados no mesmo sistema, cada um executando seu próprio conjunto de aplicativos e processos do resto. Plataformas de contêineres populares incluem Docker e Podman.
Ao contrário das máquinas virtuais, os contêineres são executados em isolamento completo do sistema operacional subjacente. Os contêineres são excepcionalmente leves - apenas alguns megabytes - ocupam menos espaço e são fáceis de usar. Eles são fáceis de iniciar e parar e podem lidar com mais aplicativos do que uma máquina virtual.
Os contêineres fornecem uma maneira conveniente de projetar, testar e implantar aplicativos de seu PC diretamente em um ambiente de produção, seja no local ou na nuvem. Aqui estão alguns dos benefícios do uso de aplicativos em contêineres.
Antes dos contêineres, tínhamos o modelo monolítico antiquado, em que um aplicativo inteiro composto por componentes de front-end e back-end era agrupado em um único pacote. Os contêineres permitem dividir um aplicativo em vários componentes individuais que podem se comunicar entre si.
Dessa forma, as equipes de desenvolvimento podem colaborar em várias partes de um aplicativo, desde que nenhuma modificação importante seja feita em relação ao modo como os aplicativos interagem uns com os outros.
É nisso que se baseia o conceito de microsserviços.
Mais modularidade significa mais produtividade, pois os desenvolvedores podem trabalhar em componentes individuais do aplicativo e depurar erros muito mais rápido do que antes.
Em comparação com as máquinas virtuais e outros ambientes de computação convencionais, os contêineres usam menos recursos do sistema, pois não incluem um sistema operacional. Isso evita gastos desnecessários na aquisição de servidores caros para construir e testar aplicativos.
Devido ao seu tamanho reduzido, os aplicativos em contêineres podem ser facilmente implantados em vários ambientes de computação / sistemas operacionais.
Os contêineres permitem rápida implantação e dimensionamento de aplicativos. Eles também fornecem a flexibilidade necessária para implantar aplicativos em vários ambientes de software.
Os contêineres desempenham um papel fundamental na DevOps e seria impossível imaginar como seria a situação sem aplicativos em contêineres. Então, o que os contêineres trazem para a mesa?
Primeiro, os contêineres sustentam a arquitetura de microsserviços, permitindo que os blocos de construção de um aplicativo inteiro sejam desenvolvidos, implantados e escalonados de forma independente. Conforme mencionado, isso contribui para uma maior colaboração e implantação rápida de aplicativos.
A conteinerização também desempenha um papel importante na facilitação dos pipelines de CI / CD, fornecendo um ambiente controlado e consistente para a construção de aplicativos. Todas as bibliotecas e dependências são empacotadas junto com o código em uma única unidade para uma implantação mais rápida e fácil. O aplicativo testado será o software exato que será implantado na produção.
Além disso, os contêineres aprimoram a distribuição de patches e atualizações quando um aplicativo é dividido em vários microsserviços, cada um em um contêiner separado. Os contêineres individuais podem ser examinados, corrigidos e reiniciados sem interromper o restante do aplicativo.
Qualquer organização que busca atingir a maturidade em DevOps deve considerar o aproveitamento do poder dos contêineres para implementações ágeis e contínuas. O desafio está em saber como configurá-los, protegê-los e implantá-los perfeitamente em vários ambientes.