
Contêineres
Contêineres
O que são contêineres?
Os contêineres são unidades executáveis de software nas quais o código do aplicativo é empacotado, junto às suas bibliotecas e dependências, de maneira semelhante para que possa ser executado em qualquer lugar, seja no desktop, na estrutura de TI tradicional ou na cloud.
Para isso, os contêineres utilizam um tipo de virtualização de sistema operacional (S.O.) na qual os recursos do S.O. (no caso do kernel do Linux, os namespaces e as primitivas de cgroups) são usados para ambos os processos isolados a fim de controlar a quantia de CPU, de memória e de disco à qual esses processos têm acesso.
Os contêineres são pequenos, rápidos e portáteis, pois, ao contrário de uma máquina virtual, os contêineres não precisam incluir um sistema operacional convidado em todas as instâncias e podem apenas usar as funções e os recursos do sistema operacional de host.
Os contêineres surgiram pela primeira vez décadas atrás com versões como FreeBSD Jails e AIX Workload Partitions, mas a maioria dos desenvolvedores modernos lembra de 2013 como o início da era moderna dos contêineres com o surgimento do Docker.
Contêineres vs. máquinas virtuais (VMs)
Uma maneira de entender melhor um contêiner é entender como ele se difere de uma máquina virtual(VM) tradicional. Na virtualização tradicional, seja on-premises ou na cloud, um hypervisor é potencializado para virtualizar o hardware físico. Cada VM contém um sistema operacional guest, uma cópia virtual do hardware que ele precisa para ser executado e um aplicativo com suas bibliotecas e dependências associadas.
Em vez de virtualizar o hardware subjacente, os contêineres virtualizam o sistema operacional (geralmente Linux) de modo que cada contêiner individual contenha apenas o aplicativo e suas bibliotecas e dependências. A ausência do sistema operacional guest é o motivo pelo qual os contêineres são tão leves e, portanto, rápidos e portáveis.
Para obter detalhes adicionais sobre esta comparação, confira "Contêineres vs. máquinas virtuais: qual é a diferença?"
Benefícios dos contêineres
A principal vantagem dos contêineres, especialmente em comparação com uma VM, está em fornecer um nível de abstração que os torna leves e portáteis.
- Leve: os contêineres compartilham o kernel do sistema operacional da máquina, eliminando a necessidade de uma instância completa do sistema operacional por aplicativo e tornando os arquivos contêineres pequenos e fáceis de usar. Seu tamanho menor, especialmente comparado a máquinas virtuais, significa que eles podem se adaptar rapidamente e oferecer melhor suporte aos aplicativos nativos em cloud que ajustam a escala horizontalmente.
- Portátil e independente de plataforma: os contêineres carregam todas as suas dependências com eles, significando que um software pode ser codificado uma vez e ser executado sem precisar ser reconfigurado nos ambientes de computação como notebooks, clouds e on-premises.
- Oferece suporte ao desenvolvimento e arquitetura modernos: devido a uma combinação de sua portabilidade/consistência de implementação entre plataformas e seu tamanho pequeno, os contêineres são ideais para o desenvolvimento moderno e padrões de aplicativos, como DevOps, sem servidor e microsserviços, que são desenvolvidos e são implementações regulares de código realizados em pequenos incrementos.
- Melhora a utilização: Assim como as VMs, os contêineres permitem que desenvolvedores e operadores melhorem a utilização da CPU e da memória de máquinas físicas. Um dos principais benefícios dos contêineres é que, como também permitem arquiteturas de microsserviços, os componentes de aplicativos podem ser implementados e serem ajustados em escala de modo mais granular, uma alternativa interessante a ter que aumentar a escala de um aplicativo monolítico inteiro, porque um único componente está em dificuldade para processar a carga.
Em uma pesquisa recente da IBM (PDF, 1,4 MB), desenvolvedores e executivos de TI relataram muitos outros benefícios do uso de contêineres. Conheça os benefícios usando a ferramenta interativa abaixo:
Faça o download do relatório completo, Contêineres na empresa (PDF, 1,4 MB)
Casos de uso para contêineres
Contêineres estão sendo cada vez mais utilizados, especialmente em ambientes de cloud. Muitas organizações estão mesmo considerando substituir as VMs por contêineres como uma plataforma de computação de propósito geral para seus aplicativos e cargas de trabalho. Mas dentro desse escopo muito amplo há casos de uso que se destacam, nos quais os contêineres são especialmente relevantes.
- Microsserviços: Os contêineres são pequenos e leves, o que os torna ideais para arquiteturas de microsserviço em que os aplicativos são desenvolvidos com muitos serviços menores, fracamente acoplados e que podem ser implementados de forma independente.
- DevOps: A combinação de microsserviços como arquitetura e contêineres como plataforma é uma base comum para muitas equipes que adotam o DevOps como forma de criar, entregar e executar o software.
- Híbrido e multicloud: Como os contêineres podem ser executados de maneira consistente e em qualquer lugar, em ambientes de notebook, on-premises e na cloud, eles são uma arquitetura subjacente ideal para cenários de cloud híbrida e de multicloud, nos quais as organizações operam em diversas clouds públicas combinadas com seu próprio datacenter.
- Modernização e migração de aplicativos: Uma das abordagens mais comuns de modernização de aplicativos consiste em colocá-los em contêineres para que sejam migrados para a cloud.
Conteinerização
O software precisa ser projetado e empacotado de maneira diferente para aproveitar os contêineres, um processo comumente chamado de conteinerização.
Ao colocar um aplicativo em contêineres, o processo inclui empacotamento de um aplicativo com suas variáveis de ambiente relevantes, arquivos de configuração, bibliotecas e dependências de software. O resultado é uma imagem de contêiner que pode então ser executada em uma plataforma de contêiner. Para obter informações adicionais, confira o vídeo "Contêinerização explicada" (08:09):
Orquestração de contêineres com o Kubernetes
Conforme as empresas começaram a adotar contêineres, geralmente como parte de arquiteturas nativas em cloud, a simplicidade do contêiner individual começou entrar em conflito com a complexidade de gerenciar centenas (até milhares) de contêineres em um sistema distribuído.
Para superar esse desafio, a orquestração de contêiner surgiu como uma forma de gerenciar grandes volumes de contêineres ao longo de seu ciclo de vida, incluindo:
- Fornecimento
- Redundância
- Monitoramento do funcionamento
- Alocação de recursos
- Ajuste de escala e balanceamento de carga
- Migração entre hosts físicos
Embora muitas plataformas de orquestração de contêineres (como Apache Mesos, Nomad e Docker Swarm) tenham sido criadas para ajudar a enfrentar esses desafios, o Kubernetes, um projeto de código aberto apresentado pelo Google em 2014, rapidamente se tornou a plataforma de orquestração de contêineres mais conhecida, e é usado como padrão pela maioria dos setores de mercado.
O Kubernetes permite que desenvolvedores e operadores declarem um estado geral desejado de seu ambiente de contêiner por meio de arquivos YAML e, então, o Kubernetes faz todo o trabalho para estabelecer e manter esse estado, com atividades que incluem a implementação de um número especificado de instâncias de um determinado aplicativo ou carga de trabalho, reinicializar esse aplicativo se ele falhar, balanceamento de carga, ajuste de escala automático, implementações com tempo de inatividade zero, e muito mais.
Para saber mais sobre o Kubernetes, Sai Vennam apresenta uma visão geral do Kubernetes no vídeo abaixo (10:59):
O Kubernetes é hoje operado pela Cloud Native Computing Foundation (CNCF), que é um grupo do mercado que é independente de provedores e que está sob os cuidados da Linux Foundation.
Istio, Knative e o ecossistema de contêineres em expansão
Como os contêineres continuam a ganhar espaço como uma maneira popular de empacotar e executar aplicativos, o ecossistema de ferramentas e projetos criados para fortalecer e expandir os casos de uso da produção continua a crescer. Além de Kubernetes, dois dos projetos mais populares no ecossistema de contêineres são o Istio e o Knative.
Istio
Conforme os desenvolvedores aproveitam os contêineres para criar e executar arquiteturas de microsserviço, as preocupações de gerenciamento vão além das considerações do ciclo de vida de contêineres individuais e na forma como um grande número de pequenos serviços, muitas vezes chamados de "malha de serviço", se conectam e se relacionam. O Istio foi criado para os desenvolvedores a fim de facilitar o gerenciamento dos desafios associados a descoberta, tráfego, monitoramento, segurança e muito mais. Para obter informações adicionais sobre o Istio, consulte "O que é Istio?" e assista a este vídeo explicativo do Istio (05:06):
Knative
As arquiteturas sem servidor continuam a se tornar mais conhecidas, particularmente dentro da comunidade de tecnologias nativas da cloud. A maior vantagem da Knative é a sua capacidade de implementar serviços de contêineres como funções sem servidor.
Em vez de permanecer em execução o tempo todo e responder quando necessário (como um servidor faz), uma função sem servidor pode "ajustar a escala para zero", o que significa que ele não permanece em execução, a menos que seja solicitado. Este modelo pode economizar enorme quantia de capacidade computacional quando aplicado a dezenas de milhares de contêineres.
Para obter informações adicionais sobre o Knative, assista este vídeo chamado "O que é Knative?" (07:58):
Contêineres e IBM Cloud
Os serviços de contêiner da IBM Cloud foram criados em tecnologias de software livre para facilitar e acelerar sua jornada para a cloud. Desenvolva aplicativos em contêineres usando integração contínua e ferramentas de entrega contínua (CI/CD). Orquestre contêineres usando os serviços gerenciados Red Hat OpenShift ou Kubernetes. E modernize os aplicativos existentes com o middleware IBM conteinerizado e com componentes de software livre no IBM Cloud Paks.
Saiba mais sobre contêineres na IBM Cloud.
Inscreva-se para obter um IBMid e crie sua conta na IBM Cloud.