O que são contêineres?
Saiba mais sobre a importância dos contêineres na cloud computing, seus principais benefícios e o ecossistema emergente de tecnologias relacionadas, incluindo Docker, Kubernetes, Istio e Knative.
Assine a newsletter da IBM
Fundo preto e azul com formas geométricas agrupadas
O que são contêineres?

Contêineres são unidades executáveis de software em que o código do aplicativo é empacotado com suas respectivas bibliotecas e dependências, usando métodos comuns para executá-los em qualquer lugar, seja em um computador desktop, na estrutura de TI tradicional ou na cloud.

Para fazer isso, os contêineres usam uma forma de virtualização de sistema operacional (SO) em que os recursos do kernel do sistema operacional (por exemplo, namespaces e cgroups do Linux, silos Windows e objetos de tarefas) podem ser utilizados para isolar processos e controlar o volume de CPU, memória e disco que podem ser acessados por esses processos.

Os contêineres são pequenos, rápidos e móveis pois, ao contrário de uma máquina virtual, não precisam incluir um SO guest em todas as instâncias e podem simplesmente usar os recursos do SO host.

Os contêineres surgiram pela primeira vez décadas atrás com versões como o FreeBSD Jails e o AIX Workload Partitions, mas a maioria dos desenvolvedores modernos considera o ano de 2013 como o início da era moderna dos contêineres devido ao surgimento do Docker.

Contêineres e máquinas virtuais

Uma maneira de entender melhor um contêiner é saber quais são suas diferenças em relação a uma máquina virtual (VM) tradicional. Na virtualização tradicional, seja on-premises ou na cloud, um hypervisor é usado para virtualizar o hardware físico. Cada VM contém um sistema operacional guest, uma cópia virtual do hardware necessário para que ele possa ser executado e um aplicativo com suas bibliotecas e dependências associadas.

Em vez de virtualizar o hardware necessário, 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áteis.

Para obter mais detalhes sobre essa 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 proporcionar um nível de abstração que os torna leves e portáteis. Seus principais benefícios são:

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 de contêineres pequenos e fáceis de usar. O tamanho menor, especialmente em comparação com máquinas virtuais, significa que eles podem se adaptar rapidamente e suportar melhor aplicativos nativos da cloud com escala ajustada horizontalmente.

Móvel e independente de plataforma: os contêineres carregam todas as dependências associadas com eles, o que significa que um software pode ser codificado uma vez e executado sem a necessidade de reconfigurá-lo nos ambientes de computação locais, na cloud ou em notebooks.

Suporte a padrões modernos de desenvolvimento e arquitetura: devido a uma combinação de sua portabilidade/consistência de implementação entre plataformas e seu porte pequeno, os contêineres são ideais para desenvolvimento e padrões de aplicativos modernos, como DevOpsserverless e microsserviços, criados com implementações regulares de código em pequenos incrementos.

Melhor 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 escalados de modo mais granular, uma alternativa interessante a ter que escalar um aplicativo monolítico inteiro quando um único componente está tendo dificuldades com 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.

Faça o download do relatório completo: Contêineres corporativos (PDF, 1,4 MB)

Casos de uso para contêineres

Os 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. No entanto, nesse 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 diversos serviços menores, fracamente acoplados, que podem ser implementados de maneira 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 software.
  • Multicloud híbrida: como os contêineres podem ser executados de maneira consistente em qualquer lugar, como ambientes de notebook, locais e em cloud, eles são uma arquitetura base ideal para cenários de cloud híbrida e multicloud, nos quais as organizações operam em diversas clouds públicas em conjunto com seu próprio data center.
  • Modernização e migração de aplicativos: uma das abordagens mais comuns para a modernização de aplicativos é conteinerizá-los em preparação para a migração para a cloud.
Conteinerização

O software precisa ser projetado e empacotado de maneira diferente para aproveitar os contêineres, e esse processo é comumente chamado de conteinerização.

Ao conteinerizar um aplicativo, o processo inclui o empacotamento dele com as variáveis de ambiente, os arquivos de configuração, as bibliotecas e as dependências de software relevantes. O resultado é uma imagem de contêiner que pode ser executada em uma plataforma de contêineres.

Orquestração de contêineres com o Kubernetes

Conforme as empresas começaram a adotar contêineres, geralmente como parte de arquiteturas modernas nativas da cloud, a simplicidade do contêiner individual começou a entrar em conflito com a complexidade do gerenciamento de centenas (ou até milhares) de contêineres em um sistema distribuído.

Para superar esse desafio, a orquestração de contêineres surgiu como uma forma de gerenciar grandes volumes de contêineres ao longo de seu ciclo de vida, incluindo:

  • Provisionamento
  • 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 desejado do ambiente de contêiner geral por meio de arquivos YAML e, em seguida, faz todo o trabalho para estabelecer e manter esse estado, com atividades que incluem a implementação de um número específico de instâncias de um determinado aplicativo ou carga de trabalho, a reinicialização do aplicativo em caso de falha, o balanceamento de carga, o ajuste de escala automático, implementações com tempo de inatividade nulo e muito mais.

Atualmente, o Kubernetes é operado pela Cloud Native Computing Foundation (CNCF), um grupo independente de fornecedores do setor, sob os cuidados da Linux Foundation.

O vídeo abaixo descreve como o Kubernetes funciona:

Istio, Knative e o ecossistema de contêineres em expansão

À medida que os contêineres continuam a ganhar espaço como uma maneira conhecida de empacotar e executar aplicativos, o ecossistema de ferramentas e projetos criados para fortalecer e expandir os casos de uso de produção continua a crescer. Além do Kubernetes, dois dos projetos mais conhecidos no ecossistema de contêineres são o Istio e o Knative.

Istio

À medida que os desenvolvedores utilizam os contêineres para criar e executar arquiteturas de microsserviços, as preocupações de gerenciamento ultrapassam as considerações do ciclo de vida de contêineres individuais e abordam a forma como um grande número de pequenos serviços, muitas vezes chamados de "malha de serviços", são conectados e se relacionam uns com os outros. O Istio foi criado para os desenvolvedores a fim de facilitar o gerenciamento dos desafios associados à descoberta, ao tráfego, ao monitoramento, à segurança, entre outros. 

Conheça mais sobre o Istio

Knative

As arquiteturas sem servidor continuam a se tornar mais conhecidas, particularmente na comunidade de tecnologias nativas da cloud. A Knative, por exemplo, oferece valor significativo em sua capacidade de implementar serviços conteinerizados como funções sem servidor.

Em vez de permanecer em execução o tempo todo e responder quando necessário (como um servidor), uma função serverless pode "ajustar a escala para zero", o que significa que não permanece em execução, a menos que isso seja solicitado. Esse modelo pode economizar grandes quantidades de capacidade computacional quando aplicado a dezenas de milhares de contêineres. 

O vídeo abaixo explica mais sobre o Knative:

Soluções relacionadas
Red Hat® OpenShift on IBM® Cloud

Red Hat OpenShift on IBM Cloud potencializa o OpenShift em ambientes públicos e híbridos para obter velocidade, resposta de mercado, escalabilidade e confiabilidade.

Conheça o Red Hat OpenShift on IBM Cloud
IBM® Cloud Satellite

Com o IBM Cloud Satellite, é possível lançar serviços de cloud consistentes em qualquer lugar, como localmente, na borda e em ambientes de cloud pública.

Conheça o IBM Cloud Satellite
IBM Cloud Code Engine

Execute imagens de contêiner, tarefas em lote ou código-fonte como cargas de trabalho serverless, sem a necessidade de dimensionamento, implementação, rede ou ajuste de escala.

Conheça o IBM Cloud Code Engine
IBM Cloud Container Registry

IBM Cloud Container Registry proporciona um registro privado que permite gerenciar suas imagens e monitorá-las em busca de problemas de segurança.

Conheça o IBM Cloud Container Registry
Recursos Contêineres corporativos

Uma nova pesquisa da IBM documenta a expansão atual da adoção de contêineres e do Kubernetes.

Combine os melhores recursos de cloud e da TI tradicional

A orquestração de contêineres é um componente essencial de uma estratégia de cloud híbrida aberta que o permite desenvolver e gerenciar cargas de trabalho a partir de qualquer lugar.

O que é o Docker?

O Docker é uma plataforma de software livre para o desenvolvimento, a implementação e o gerenciamento de aplicativos conteinerizados.

Dê o próximo passo

O Red Hat OpenShift on IBM Cloud oferece aos desenvolvedores uma maneira rápida e segura de conteinerizar e implementar cargas de trabalho corporativas em clusters Kubernetes. Transfira tarefas demoradas e repetitivas envolvendo os gerenciamentos de segurança, de conformidade, de implementação e do ciclo de vida contínuo. Uma vez que a IBM gerencia o OpenShift Container Platform (OCP) você terá mais tempo para se concentrar em suas tarefas mais importantes.

Conheça o Red Hat OpenShift on IBM Cloud