O que é conteinerização?
Conheça a história da tecnologia de conteinerização, os benefícios e as vantagens de utilizá-la e como ela se relaciona com a virtualização.
Plano de fundo azul e preto
O que é conteinerização?

Conteinerização é o pacote de código de software somente com as bibliotecas e  dependências do sistema operacional (SO) necessárias para executar o código para criar um único executável leve, chamado de contêiner, que pode ser executado de forma consistente em qualquer infraestrutura. Mais portátil e eficiente no consumo de recurso do que máquinas virtuais (VMs), os contêineres se tornaram a unidade de computação em efeito para aplicativos modernos nativos de cloud. 

A conteinerização permite que desenvolvedores criem e implementem aplicativos de maneira mais rápida e segura. Com os métodos tradicionais, o código é desenvolvido em um ambiente de computação específico e, ao ser transferido para um novo local, pode muitas vezes resultar em bugs e erros. Por exemplo, quando um desenvolvedor transfere código de um computador desktop para uma VM ou de um sistema operacional Linux para um Windows. A conteinerização elimina esse problema ao empacotar o código do aplicativo com os arquivos de configuração, as bibliotecas e as dependências relacionados que são essenciais para a execução. Esse pacote único de software ou "contêiner" é extraído do sistema operacional host e, portanto, torna-se independente e móvel, podendo ser executado em qualquer plataforma ou cloud sem problemas.

O conceito de conteinerização e isolamento de processos já existia há décadas, mas o surgimento em 2013 do software livre Docker Engine, um padrão de mercado para contêineres com ferramentas simples de desenvolvedor e uma abordagem de pacotes, acelerou a adoção dessa tecnologia. Hoje em dia, as organizações estão usando cada vez mais a conteinerização para criar novos aplicativos e modernizar os aplicativos existentes para a cloud. Em uma pesquisa da IBM (PDF, 1,4 MB), 61% dos adotantes de contêineres declararam usá-los em 50% ou mais dos novos aplicativos desenvolvidos durante os dois anos anteriores; 64% dos adotantes esperam que 50% ou mais de seus aplicativos existentes serão colocados em contêineres nos próximos dois anos.

Contêineres são frequentemente chamados de "leves", o que significa que compartilham o kernel do sistema operacional e precisam que se associe um sistema operacional dentro de cada aplicativo. Os contêineres são inerentemente menores em capacidade do que uma VM e requerem menos tempo de inicialização, o que permite a execução de muito mais contêineres com a mesma capacidade de computação de uma única VM. Isso aumenta as eficiências de servidor que, por sua vez, reduz os custos com licenciamento e com o servidor.

Mas talvez o mais importante é o fato da conteinerização permitir que os aplicativos possam ser executados em qualquer lugar. Essa portabilidade acelera o desenvolvimento, evita a dependência de fornecedores e oferecer outros benefícios consideráveis, como isolamento de falhas, facilidade de gerenciamento, segurança simplificada e mais (veja abaixo).

Conteinerização de aplicativos

Os contêineres encapsulam um aplicativo como um único pacote executável de software que reúne o código do aplicativo juntamente com todos os arquivos de configuração relacionados, bibliotecas e dependências necessárias para que ele seja executado. Os aplicativos conteinerizados são referidos como "isolados" pois não são integrados a uma cópia do sistema operacional. Em vez disso, um mecanismo de tempo de execução de software livre (como o mecanismo de tempo de execução Docker) é instalado no sistema operacional do host e se torna o canal para os contêineres compartilharem um sistema operacional uns com os outros, no mesmo sistema de computação.

Outras camadas do contêiner, como bins e bibliotecas comuns, também podem ser compartilhadas entre diversos contêineres. Isso elimina a sobrecarga da execução de um sistema operacional dentro de cada aplicativo e reduz a capacidade dos contêineres, acelerando sua inicialização e aumentando as eficiências do servidor. O isolamento de aplicativos como contêineres também reduz a chance de que códigos maliciosos presentes em um contêiner afetem outros contêineres ou invadam o sistema host.

A extração do contêiner do sistema operacional host torna os aplicativos conteinerizados móveis e possíveis de serem executados de maneira uniforme e consistente em qualquer plataforma ou cloud. Os contêineres podem ser facilmente transportados de um computador desktop para uma máquina virtual (VM) ou de um sistema operacional Linux para Windows e são executados de forma consistente em infraestruturas virtualizadas ou em servidores "bare metal" tradicionais, seja no local ou na cloud. Isso garante que os desenvolvedores de software possam continuar usando as ferramentas e os processos com os quais estão acostumados.

É fácil entender por que as empresas estão adotando rapidamente a conteinerização como uma abordagem superior para o desenvolvimento e gerenciamento de aplicativos. A conteinerização permite que os desenvolvedores criem e implementem aplicativos de forma mais rápida e segura, seja o aplicativo um monólito tradicional (um aplicativo de software em camada única) ou um aplicativo modular criado com arquitetura de microsserviço.  Novos aplicativos baseados em cloud podem ser completamente construídos como microsserviços conteinerizados, o que quebra um aplicativo complexo em uma série de serviços menores que são especializados e gerenciáveis. Os aplicativos existentes podem ser colocados em contêineres (ou microsserviços conteinerizados) que utilizam recursos de computação de forma mais eficiente.

Benefícios da conteinerização, em detalhes

A conteinerização oferece vantagens significativas para desenvolvedores e equipes de desenvolvimento. Entre elas, estão:

Portabilidade: um contêiner cria um pacote executável de software extraído do sistema operacional do host (não é vinculado ou dependente a ele) e, portanto, é móvel e pode ser executado de maneira uniforme e consistente em qualquer plataforma ou cloud. 

Agilidade: o mecanismo de Docker de software livre para a execução de contêineres inaugurou o padrão de mercado para contêineres, com ferramentas simples para desenvolvedores e uma abordagem de pacotes universais que podem ser executados em sistemas operacionais Linux e Windows. O ecossistema de contêineres foi deslocado para mecanismos gerenciados pela Open Container Initiative (OCI). Os desenvolvedores de software podem continuar usando ferramentas e processos ágeis ou DevOps para desenvolvimento e aprimoramento rápido de aplicativos.

Velocidade: os contêineres são frequentemente chamados de "leves" pois compartilham o kernel do sistema operacional (SO) da máquina e não são afetados por essa sobrecarga. Isso não só impulsiona as eficiências do servidor, mas também reduz custos com servidor e licenciamento, além de acelerar os tempos de inicialização devido à ausência de um sistema operacional para ser inicializado.

Isolamento de falhas: cada aplicativo conteinerizado é isolado e opera de forma independente dos outros. A falha de um contêiner não afeta a continuidade da operação dos demais. As equipes de desenvolvimento podem identificar e corrigir quaisquer problemas técnicos dentro de um contêiner sem qualquer tempo de inatividade nos outros. Além disso, o mecanismo de contêiner pode utilizar quaisquer técnicas de isolamento de segurança de SO, como o controle de acesso SELinux, para isolar falhas dentro de contêineres.

Eficiência: o software em execução em ambientes conteinerizados compartilha o kernel do SO da máquina; além disso, as camadas de aplicativos dentro de um contêiner podem ser compartilhadas entre os contêineres. Assim, os contêineres são inerentemente menores em capacidade do que uma VM e requerem menos tempo de inicialização, o que permite a execução de muito mais contêineres com a mesma capacidade de computação de uma única VM. Isso impulsiona as eficiências de servidor superiores e, por sua vez, reduz os custos com servidor e licenciamento.

Facilidade de gerenciamento: uma plataforma de orquestração de contêiner automatiza a instalação, o ajuste de escala e o gerenciamento de cargas de trabalho e serviços em contêiner. As plataformas de orquestração de contêineres podem facilitar tarefas de gerenciamento, como o ajuste da escala de aplicativos conteinerizados e o lançamento de novas versões de aplicativos, além de fornecer monitoramento, criação de logs e depuração, entre outras funções. O Kubernetes, talvez o sistema de orquestração de contêineres mais conhecido, é uma tecnologia de software livre (originalmente lançada como software livre pela Google, baseada em seu projeto interno Borg) que automatiza as funções de contêineres originalmente pertencentes ao Linux. O Kubernetes funciona com muitos mecanismos de contêiner, como o Docker, mas também funciona com qualquer sistema de contêineres que esteja em conformidade com os padrões da Open Container Initiative (OCI) para formatos e tempos de execução de imagem de contêiner.

Segurança: o isolamento de aplicativos como contêineres impede que a invasão de códigos maliciosos afete outros contêineres ou o sistema host. Além disso, as permissões de segurança podem ser definidas para impedir automaticamente que componentes indesejados entrem em contêineres ou para limitar a comunicação com recursos desnecessários.

Tipos de conteinerização

O rápido crescimento do interesse e do uso de soluções com base em contêineres resultou na necessidade de criar padrões para a tecnologia de contêineres e para a abordagem de pacotes de código de software. A Open Container Initiative (OCI), criada em junho de 2015 pela Docker e por outros líderes do mercado, promove padrões e especificações comuns, mínimos e abertos para a tecnologia de contêiner. Por esse motivo, a OCI está ajudando a ampliar as opções de mecanismos de software livre. Os usuários não ficarão presos à tecnologia de um fornecedor específico e poderão aproveitar as tecnologias certificadas pela OCI, que possibilitam a criação de aplicativos conteinerizados por meio de um conjunto diversificado de ferramentas DevOps e a execução consistente na infraestruturas desejada.

Atualmente, o Docker é uma das tecnologias de mecanismo de contêiner mais conhecidas e usadas, mas não é a única opção disponível. O ecossistema está sendo padronizado no containerd e outras alternativas como CoreOS rkt, Mesos Containerizer, LXC Linux Containers, OpenVZ e crio-d. Os recursos e os padrões podem ser diferentes, mas a adoção e utilização das especificações da OCI à medida que evoluem garantirão que as soluções não dependam de fornecedores, certificadas para execução em diversos sistemas operacionais e utilizáveis em diversos ambientes.

Microsserviços e conteinerização

As grandes e pequenas empresas de software estão adotando os microsserviços como uma abordagem superior ao desenvolvimento e ao gerenciamento de aplicativos em comparação com modelos monolíticos anteriores, que combinavam um aplicativo de software com a interface com o usuário associada e o banco de dados base em uma única unidade, em uma única plataforma de servidor. Com os microsserviços, um aplicativo complexo é dividido em uma série de serviços menores e mais especializados, com seu próprio banco de dados e sua própria lógica de negócios. Em seguida, os microsserviços se comunicam uns com os outros por meio de interfaces comuns (como APIs) e interfaces REST (como HTTP). Usando microsserviços, as equipes de desenvolvimento podem se concentrar na atualização de áreas específicas de um aplicativo sem impactá-lo como um todo, resultando em maior rapidez no desenvolvimento, no teste e na implementação.

Os conceitos por trás dos microsserviços e da conteinerização são semelhantes, já que ambos são práticas de desenvolvimento de software que basicamente transformam aplicativos em conjuntos de serviços ou componentes menores, móveis, escaláveis, eficientes e mais fáceis de gerenciar.

Além disso, microsserviços e conteinerização funcionam bem quando usados em conjunto. Os contêineres fornecem um encapsulamento leve de qualquer aplicativo, seja um monólito tradicional ou um microsserviço modular. Um microsserviço, desenvolvido dentro de um contêiner, aproveita todos os benefícios inerentes à conteinerização: portabilidade em relação ao processo de desenvolvimento e compatibilidade com fornecedores (sem dependência de fornecedor), além de agilidade para desenvolvedores, isolamento de falhas, eficiências de servidor, automação de instalação, ajuste de escala e gerenciamento e camadas de segurança, entre outros.

As comunicações de hoje estão se movendo rapidamente para a cloud, onde os usuários podem desenvolver aplicativos com rapidez e eficiência. Aplicativos e dados com base em cloud podem ser acessados por meio de qualquer dispositivo conectado à Internet, o que permite que os membros da equipe trabalhem remotamente e em movimento. Os provedores de serviços em cloud (CSPs) gerenciam a infraestrutura subjacente, o que economiza para as empresas o custo de servidores e outros equipamentos, além de fornecer backups de rede automatizados para confiabilidade adicional. As infraestruturas de cloud podem ser escaladas sob demanda e podem ajustar os recursos de computação, a capacidade e a infraestrutura de forma dinâmica, de acordo com os requisitos de carga. Além disso, os CSPs atualizam regularmente as soluções, oferecendo aos usuários acesso contínuo à mais recente tecnologia inovadora.

Contêineres, microsserviços e cloud computing estão trabalhando juntos para levar o desenvolvimento e a entrega de aplicativos para novos níveis que não seriam possíveis com as metodologias e os ambientes tradicionais. Essas abordagens de nova geração agregam agilidade, eficiência, confiabilidade e segurança ao ciclo de vida de desenvolvimento de software, resultando na entrega mais rápida de aplicativos e aprimoramentos para usuários finais e para o mercado.

Segurança

Os aplicativos conteinerizados possuem segurança inerente, visto que podem ser executados como processos isolados e operar de maneira independente de outros contêineres. Sendo verdadeiramente isolados, podem impedir que qualquer código malicioso afete outros contêineres ou invada o sistema host. No entanto, as camadas de aplicativos dentro de um contêiner são frequentemente compartilhadas entre contêineres. Em termos de eficiência de recursos, isso é uma vantagem, mas também abre as portas para interferências e violações de segurança em contêineres. O mesmo poderia ser dito do sistema operacional compartilhado, pois diversos contêineres podem ser associados ao mesmo sistema operacional do host. As ameaças à segurança do sistema operacional comum podem afetar todos os contêineres associados e, em contrapartida, uma invasão de contêiner pode potencialmente invadir o sistema operacional host.

Mas e quanto à imagem de contêiner em si? Como os aplicativos e os componentes de software livre empacotados em um contêiner podem melhorar a segurança? Os provedores de tecnologia de contêiner, como o Docker, continuam a enfrentar ativamente os desafios da segurança de contêineres. A conteinerização adotou uma abordagem de "segurança por padrão", acreditando que a segurança deve ser inerente à plataforma e não uma solução implementada e configurada separadamente. Para isso, o mecanismo de contêiner suporta todas as propriedades de isolamento padrão inerentes ao sistema operacional subjacente. As permissões de segurança podem ser definidas para impedir automaticamente que componentes indesejados entrem em contêineres ou para limitar a comunicação com recursos desnecessários.

Por exemplo, os namespaces Linux ajudam a fornecer uma visualização isolada do sistema para cada contêiner, incluindo redes, pontos de montagem, IDs de processos, IDs de usuário, comunicação entre processos e configurações de nome de host. Os namespaces podem ser usados para limitar o acesso a qualquer um desses recursos por meio de processos em cada contêiner. Normalmente, os subsistemas que não têm suporte a namespace não são acessíveis a partir de um contêiner. Os administradores podem criar e gerenciar facilmente essas "restrições de isolamento" em cada aplicativo conteinerizado, por meio de uma interface simples com o usuário.

Os pesquisadores estão trabalhando para fortalecer ainda mais a segurança de contêineres do Linux, e uma ampla variedade de soluções de segurança está disponível para automatizar a detecção e a resposta a ameaças em uma empresa; para monitorar e aplicar a conformidade e atender aos padrões do mercado e às políticas de segurança; para garantir o fluxo seguro de dados por meio de aplicativos e terminais e muito mais.

Saiba mais sobre uma estratégia para ajuste de escala da segurança de contêiner em organizações de qualquer tamanho.

Virtualização vs. conteinerização

Os contêineres são comparados coma frequência a máquinas virtuais (VMs), pois ambas as tecnologias possibilitam um aumento considerável das eficiências de computação ao permitir que diversos tipos de software (baseados em Linux ou Windows) sejam executados em um único ambiente. No entanto, a tecnologia de contêiner está fornecendo, comprovadamente, benefícios consideráveis além daqueles oferecidos pela virtualização e está rapidamente se tornando a tecnologia preferencial dos profissionais de TI.

A tecnologia de virtualização permite que diversos sistemas operacionais e aplicativos de software sejam executados simultaneamente e compartilhem os recursos de um único computador físico. Por exemplo, uma organização de TI pode executar o Windows e o Linux ou diversas versões de um sistema operacional com diversos aplicativos no mesmo servidor. Cada aplicativo e seus arquivos, bibliotecas e dependências relacionados, incluindo uma cópia do sistema operacional (SO), são colocados juntos em um pacote como uma VM. Com diversas VMs em execução em uma única máquina física, é possível obter economias significativas de custo de capital, operacional e de energia.

Para mais uma visão geral sobre a virtualização, assista os vídeos "Virtualização em 2019" e "Virtualização: um guia completo" (em inglês).

A conteinerização, por outro lado, usa recursos de computação de forma ainda mais eficiente. Um contêiner cria um único pacote de software executável que empacota o código do aplicativo e todos os arquivos de configuração, as bibliotecas e as dependências relacionados que são necessários para sua execução. Ao contrário das VMs, no entanto, os contêineres não são integrados com uma cópia do SO Em vez disso, o mecanismo de tempo de execução do contêiner é instalado no sistema operacional do sistema host, tornando-se o canal por meio do qual todos os contêineres no sistema de computação compartilham o mesmo sistema operacional.

Conforme já observado, os contêineres são geralmente chamados de "leves" pois compartilham o kernel do sistema operacional da máquina e não precisam associar um sistema operacional dentro de cada aplicativo (como é o caso de uma VM). Outras camadas de contêineres (categorias e bibliotecas comuns) também podem ser compartilhadas entre diversos contêineres, tornando-os inerentemente menores em capacidade do que uma VM e mais rápidos na inicialização. Diversos contêineres podem ser executados com a mesma capacidade de computação de uma única VM, impulsionando ainda mais as eficiências do servidor e reduzindo ainda mais os custos com servidor e licenciamento.

Soluções relacionadas
Red Hat OpenShift on IBM Cloud

O 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, no local, na borda e em ambientes de cloud pública.

Conheça o IBM Cloud Satellite
IBM Cloud Code Engine

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

Conheça o IBM Cloud Code Engine
Recursos Contêineres na empresa

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

O que é o Docker?

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

O que são os microsserviços?

Em uma arquitetura de microsserviços, cada aplicativo é composto por muitos serviços menores, fracamente acoplados e independentemente implementáveis.

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 do Kubernetes.Transfira tarefas tediosas e repetitivas envolvendo o gerenciamento de segurança, o gerenciamento de conformidade, o gerenciamento de implementação e o gerenciamento de ciclo de vida contínuo.Como a IBM gerencia o OpenShift Container Platform (OCP), você tem mais tempo para se concentrar em suas principais tarefas.

Conheça o Red Hat OpenShift on IBM Cloud