Publicado em: 9 de maio de 2024
Colaboradores: Stephanie Susnjara, Ian Smalley
Contêineres são unidades executáveis de software que empacotam o código da aplicação juntamente com suas bibliotecas e dependências. Eles permitem que o código seja executado em qualquer ambiente de computação, seja desktop, TI tradicional ou infraestrutura de nuvem.
Os contêineres aproveitam uma forma de virtualização do sistema operacional (SO) na qual os recursos do kernel do SO (por exemplo, namespaces e cgroups do Linux, silos do Windows e objetos de trabalho) podem ser usados para isolar processos e controlar a quantidade de CPU, memória e disco que esses processos podem acessar.
Mais portáteis e eficientes em termos de recursos do que as máquinas virtuais (VMs), os contêineres se tornaram as unidades de computação padrão de aplicações nativas da nuvem modernas. Além disso, os contêineres são essenciais para a infraestrutura de TI subjacente que alimenta as configurações de multinuvem híbrida – a combinação de local, nuvem privada, nuvem pública e mais de um serviço de nuvem de mais de um fornecedor de nuvem.
De acordo com um relatório da Business Research Insights1, o mercado global de tecnologia de contêineres foi avaliado em US$ 496,4 milhões em 2021 e espera-se que atinja US$ 3123,42 milhões até 2031, com uma taxa de crescimento anual composta (CAGR) de 19,8%.
A modernização estratégica de aplicativos é uma chave para o sucesso transformacional que pode aumentar a receita anual e reduzir os custos de manutenção e operação.
Assine a newsletter da IBM
Uma forma de entender melhor um contêiner é examinar como ele difere de uma máquina virtual (VM) tradicional, que é uma representação ou emulação virtual de um computador físico. Uma VM é geralmente chamada de "convidado", enquanto a máquina física em que ela é executada é chamada de "hospedeira".
A tecnologia de virtualização torna as VMs possíveis. Um hipervisor– uma pequena camada de software – aloca recursos físicos de computação (por exemplo, processadores, memória, armazenamento) em cada VM. Ele mantém as VM separadas para que não interfiram umas nas outras. Cada VM contém um sistema operacional convidado e uma cópia virtual do hardware do qual o sistema operacional precisa para ser executado, juntamente com uma aplicação e suas bibliotecas e dependências associadas. O VMware foi um dos primeiros a desenvolver e comercializar a tecnologia de virtualização com base em hipervisores.
Em vez de virtualizar o hardware subjacente, a tecnologia de contêiner virtualiza o sistema operacional (normalmente Linux) para que cada contêiner contenha somente a aplicação e suas bibliotecas, arquivos de configuração e dependências. A ausência do sistema operacional convidado é o motivo pelo qual os contêineres são tão leves e, portanto, mais rápidos e mais portáteis do que as máquinas virtuais.
Contêineres e máquinas virtuais não são mutuamente exclusivos. Por exemplo, uma organização pode aproveitar as duas tecnologias executando contêineres nas VMs para aumentar o isolamento e a segurança e aproveitar as ferramentas já instaladas para automação, backup e monitoramento.
Para uma análise mais detalhada dessa comparação, consulte "Contêineres versus VMs: qual é a diferença?" e assista ao vídeo:
A principal vantagem dos contêineres, especialmente em comparação com uma VM, é que eles fornecem um nível de abstração que os torna leves e portáteis. Seus principais benefícios incluem:
Os contêineres compartilham o kernel do sistema operacional da máquina, eliminando a necessidade de uma instância completa do sistema operacional por aplicação e tornando os arquivos dos contêineres pequenos e fáceis de usar. O tamanho menor de um contêiner, especialmente em comparação com uma VM, significa que ele pode ser executado rapidamente e oferecer melhor suporte a aplicações nativas da nuvem que escalam horizontalmente.
Os contêineres carregam todas as suas dependências com eles, o que significa que o software pode ser escrito uma única vez e depois executado sem precisar ser reconfigurado em ambientes de computação (por exemplo, laptops, nuvem e locais).
Devido a uma combinação de sua portabilidade e consistência de implementação em todas as plataformas e seu tamanho pequeno, os contêineres são ideais para padrões de desenvolvimento modernos e aplicações, como DevOps, serverless e microsserviços, que são criados usando implementações de código regular em pequenos incrementos.
Assim como as VMs, os contêineres permitem que desenvolvedores e operadores melhorem a utilização da CPU e da memória das máquinas físicas. Os contêineres vão ainda mais longe porque habilitam a arquitetura de microsserviços para que os componentes da aplicação possam ser implementados e escalados de forma mais granular. Essa é uma alternativa atraente em comparação com ter que dimensionar um aplicativo monolítico inteiro porque um único componente está tendo problemas com sua carga.
Os contêineres dependem menos dos recursos do sistema, o que os torna mais rápidos de gerenciar e implementar do que as VMs. Esse recurso ajuda a economizar dinheiro e tempo na implementação de aplicações e otimiza o tempo de lançamento no mercado.
Em uma pesquisa da IBM, desenvolvedores e executivos de TI relataram muitos outros benefícios do contêiner. Confira o relatório completo: Contêineres na empresa.
Os contêineres dependem da conteinerização, do empacotamento do código de software com apenas o sistema operacional (OS) e suas variáveis de ambiente relevantes, arquivos de configuração, bibliotecas e dependências de software.
O resultado é uma imagem de contêiner executada em uma plataforma de contêiner. Uma imagem de contêiner representa dados binários que encapsulam uma aplicação e todas as suas dependências de software.
A conteinerização permite que as aplicações sejam "escritas uma única vez e executados em qualquer lugar", proporcionando portabilidade, acelerando o processo de desenvolvimento, evitando lock-in com o fornecedor de nuvem e muito mais.
A conteinerização e o isolamento de processos existem há décadas2. Um momento histórico no desenvolvimento de contêineres ocorreu em 1979 com o desenvolvimento do chroot, parte do sistema operacional Unix versão 7. O chroot introduziu o conceito de isolamento de processos por meio da restrição do acesso de uma aplicação a um diretório específico (a raiz) e seus "filhos" (ou subprocessos).
Outro marco significativo ocorreu em 2008, quando os contêineres Linux (LXCs) foram implementados no kernel Linux®, permitindo totalmente a virtualização de uma única instância do Linux. Ao longo dos anos, tecnologias como as jails do FreeBSD e as partições de carga de trabalho do AIX ofereceram uma virtualização semelhante em nível de sistema operacional.
Embora o LXC continue tendo um tempo de execução bem conhecido e faça parte da distribuição do Linux e do projeto de fornecedor neutro3, há tecnologias de kernel do Linux mais recentes disponíveis. O Ubuntu, um sistema operacional Linux moderno e de código aberto, também oferece esse recurso.
Assista ao vídeo para conhecer a fundo a conteinerização:
A maioria dos desenvolvedores considera 2013 como o início da era moderna dos contêineres com a introdução do Docker. Uma plataforma de software de conteinerização de código aberto que funciona como uma plataforma como serviço (PaaS), a Docker permite que os desenvolvedores criem, implementem, executem, atualizem e gerenciem contêineres.
O Docker usa o kernel Linux (o componente básico do sistema operacional) e os recursos do kernel (como Cgroups e namespaces) para separar os processos, para que possam ser executados de forma independente. O Docker basicamente pega um aplicativo e suas dependências e os transforma em um contêiner virtual que pode ser executado em qualquer sistema de computador com Windows, macOS ou Linux.
O Docker é baseado em uma arquitetura cliente-servidor, com o Docker Engine servindo como uma tecnologia subjacente. O Docker fornece um modelo de implementação baseado em imagem, simplificando o compartilhamento de aplicações em ambientes de computação.
Para esclarecer qualquer confusão, o nome da plataforma de contêiner Docker também se refere à Docker, Inc.4, que desenvolve ferramentas de produtividade criadas em torno de sua plataforma de conteinerização de código aberto e do ecossistema e da comunidade de código aberto Docker5.
Em 2015, a Docker e outros líderes do setor de contêineres criaram a The Open Container Initiative6, parte da Linux Foundation, uma estrutura de governança aberta com o propósito expresso de criar padrões abertos do setor em torno de formatos de contêineres e ambientes de tempo de execução.
Docker é a ferramenta de conteinerização mais utilizada, com 82,84% de participação de mercado7.
A operação de centenas de milhares de contêineres em um sistema pode se tornar incontrolável e exige uma solução de gerenciamento de orquestração.
É aí que entra a orquestração de contêineres, permitindo que as empresas gerenciem grandes volumes ao longo do seu estilo de vida, fornecendo:
Embora existam outras plataformas de orquestração de contêiner (por exemplo, Apache Mesos, Nomad, Docker Swarm), o Kubernetes tornou-se o padrão do setor.
A arquitetura Kubernetes consiste na execução de clusters que permitem que os contêineres sejam executados em várias máquinas e ambientes. Cada cluster normalmente consiste em nós de trabalho, que executam as aplicações em contêineres, e nós do plano de controle, que controlam o cluster. O plano de controle atua como orquestrador do cluster Kubernetes. Ele inclui vários componentes: o servidor de API (gerencia todas as interações com o Kubernetes), o gerenciador de controle (lida com todos os processos de controle), o gerenciador do controlador de nuvem (a interface com a API do provedor de nuvem) e assim por diante. Os nós de trabalho executam contêineres usando tempos de execução de contêiner como o Docker. Os pods, as menores unidades implementáveis em um cluster, armazenam um ou mais contêineres de aplicações e compartilham recursos, como informações de armazenamento e de rede.
O Kubernetes permite que desenvolvedores e operadores declarem o estado desejado do ambiente geral do contêiner por meio de arquivos YAML. Em seguida, o Kubernetes faz todo o trabalho de processamento para estabelecer e manter esse estado, com atividades que incluem a implementação de um número específico de instâncias de uma determinada aplicação ou carga de trabalho, reinicialização dessa aplicação caso ela falhe, balanceamento de carga, escalonamento automático, implementações com downtime zero e muito mais. A orquestração de contêineres com o Kubernetes também é crucial para a integração e entrega contínuas (CI/CD) ou o pipeline de DevOps, o que seria impossível sem automação.
Em 2015, o Google doou o Kubernetes à Cloud Native Computing Foundation (CNCF)8, o hub de computação nativa da nuvem de código aberto e neutro em relação a fornecedores operado sob os auspícios da Linux Foundation. Desde então, a Kubernetes tornou-se a ferramenta de orquestração de contêiner mais usada para executar cargas de trabalho baseadas em contêiner em todo o mundo. Em um relatório da CNCF9, a Kubernetes é o segundo maior projeto de código aberto do mundo (depois do Linux) e a principal ferramenta de orquestração de contêineres de 71% das empresas da Fortune 100.
Contêineres como serviço (CaaS) é um serviço de computação em nuvem que permite aos desenvolvedores gerenciar e implementar aplicações em contêineres, dando às empresas de todos os tamanhos acesso a soluções em nuvem portáteis e escaláveis.
O CaaS fornece uma plataforma baseada em nuvem onde os usuários podem simplificar a virtualização baseada em contêiner e os processos de gerenciamento de contêiner. Os provedores de CaaS oferecem inúmeros recursos, incluindo (mas não se limitando a) tempos de execução de contêineres, camadas de orquestração e gerenciamento de armazenamento persistente.
Semelhante à infraestrutura como serviço (IaaS), plataforma como serviço (PaaS) e software como serviço (SaaS), o CaaS está disponível em provedores de serviços de nuvem (por exemplo, AWS, Google Cloud Services, IBM Cloud, Microsoft Azure) por meio de um modelo de preços pay-as-you-go, que permite que os usuários paguem apenas pelos serviços que usam.
As organizações usam contêineres para oferecer suporte ao seguinte:
Os contêineres são pequenos e leves, o que os torna uma boa opção para arquiteturas de microsserviço, em que as aplicações são criadas com muitos serviços pequenos, com acoplamento fraco e implementação independente.
A combinação de microsserviços como arquitetura e contêineres como plataforma é uma base comum para muitas equipes de desenvolvimento e operações que adotam metodologias DevOps. Por exemplo, os contêineres oferecem suporte a pipelines de DevOps, incluindo integração contínua e implementação contínua (CI/CD).
Como os contêineres podem ser executados de forma consistente em qualquer lugar – em notebooks, no local e na nuvem – eles são uma arquitetura subjacente ideal para cenários de nuvem híbrida e multinuvem, nos quais as organizações operam em um conjunto de várias nuvens públicas em combinação com seu próprio data center.
Uma das abordagens mais comuns para a modernização de aplicações é conteinerizá-los em preparação para a migração para a nuvem.
A conteinerização (ou seja, imagens do Docker orquestradas com o Kubernetes) permite que pipelines de DevOps implementem rapidamente aplicações de inteligência artificial (IA) e aprendizado de máquina (ML) em ambientes de computação em nuvem.
Os contêineres também oferecem uma maneira eficiente de implementar e gerenciar os grandes modelos de linguagem (LLMs) associados à IA generativa, proporcionando portabilidade e escalabilidade quando usados com ferramentas de orquestração. Além disso, as alterações feitas no LLM podem ser rapidamente empacotadas em uma nova imagem de contêiner, acelerando o desenvolvimento e os testes.
Além do Kubernetes, dois dos projetos mais populares no ecossistema de contêineres são o Istio e o Knative.
À medida que os desenvolvedores usam contêineres para criar e executar microsserviços, as preocupações com o gerenciamento vão além das considerações sobre o ciclo de vida de contêineres individuais e e passam a considerar as formas como um grande número de pequenos serviços, geralmente chamados de "malha de serviço", se conectam e se relacionam entre si. O Istio torna mais fácil para os desenvolvedores gerenciar os desafios associados à descoberta, tráfego, monitoramento, segurança e muito mais.
Knative (pronuncia-se "kay-neitive") é uma plataforma de código aberto que fornece um acesso fácil à computação serverless, o modelo de desenvolvimento e execução de aplicações de computação em nuvem que permite aos desenvolvedores criar e executar o código da aplicação sem provisionar ou gerenciar servidores ou uma infraestrutura de back-end.
Em vez de implementar uma instância contínua de código que fica inativa enquanto espera por solicitações, o serverless abre o código conforme necessário, escalando-o para cima ou para baixo conforme a demanda flutua, e então desativa o código quando não está em uso. O Serverless evita o desperdício de capacidade e energia de computação e reduz os custos, porque você só paga para executar o código quando ele estiver em execução.
Como os contêineres desempenham um papel importante no desenvolvimento e na implementação de software em ambientes de nuvem híbrida, as organizações precisam garantir que suas cargas de trabalho em contêineres permaneçam protegidas contra ameaças de segurança externas e internas.
Os contêineres podem ser implementados em qualquer lugar, o que cria novas superfícies de ataque em torno do ambiente baseado em contêiner. As áreas de segurança vulneráveis incluem imagens de contêineres, registros de imagens, tempos de execução de contêineres, plataformas de orquestração de contêineres e sistemas operacionais de convidados.
Para começar, as empresas precisam integrar a segurança de contêineres às suas políticas de segurança e à estratégia geral. Essas estratégias devem incluir as melhores práticas de segurança juntamente com ferramentas de software de segurança baseadas em nuvem. Essa abordagem holística deve ser projetada para proteger as aplicações em contêineres e sua infraestrutura subjacente durante todo o ciclo de vida do contêiner.
As melhores práticas de segurança incluem uma estratégia de zero trust que pressupõe que a segurança de uma rede complexa esteja sempre em risco de ameaças externas e internas. Além disso, os contêineres requerem uma abordagem de DevSecOps. DevSecOps é uma prática de desenvolvimento de aplicações que automatiza a integração de práticas de segurança em todas as fases do ciclo de vida do desenvolvimento de software, desde o projeto inicial até a integração, os testes, a entrega e a implementação.
As organizações também precisam aproveitar as ferramentas certas de segurança de contêineres para mitigar os riscos. As soluções de segurança automatizadas incluem gerenciamento de configuração, controle de acesso, verificação de malware ou ataques cibernéticos, segmentação de rede, monitoramento e muito mais.
Além disso, há ferramentas de software disponíveis para garantir que a carga de trabalho em contêineres esteja em conformidade com os padrões regulatórios e de conformidade, como LGPD, HIPAA, etc.
O Red Hat OpenShift on IBM Cloud utiliza o Red Hat OpenShift em ambientes públicos e híbridos para velocidade, capacidade de resposta ao mercado, escalabilidade e confiabilidade.
Seja na implementação, na criação de novas aplicações nativas em nuvem, na refatoração ou na reformulação de uma aplicação existente, o Cloud Pak for Applications (CP4Apps) tem tudo o que você precisa.
Com o IBM Cloud Satellite, é possível implementar serviços em nuvem consistentes em qualquer lugar, seja em ambientes locais, na borda ou em ambientes de nuvem pública.
Execute imagens de contêineres, tarefas em lote ou código fonte como cargas de trabalho serverless sem a necessidade de dimensionamento, implementação, rede ou dimensionamento.
O IBM Cloud Container Registry fornece um registro privado que permite gerenciar suas imagens e monitorá-las quanto a problemas de segurança.
Determine automaticamente as ações corretas de alocação de recursos — e quando realizá-las — para ajudar a garantir que seus ambientes de Kubernetes e aplicativos de missão crítica recebam exatamente aquilo de que precisam para atender aos seus SLOs.
O software Fusion é executado em qualquer lugar onde o Red Hat OpenShift é executado – na nuvem pública, no local, bare metal e em máquinas virtuais. O Fusion oferece uma maneira fácil de implementar a aplicação Red Hat OpenShift e IBM watsonx.
A nova pesquisa da IBM documenta o impulso crescente do container e da adoção do Kubernetes.
A orquestração de contêineres é um componente essencial de uma estratégia de nuvem híbrida aberta que permite criar e gerenciar cargas de trabalho de qualquer lugar.
O Docker é uma plataforma de código aberto para construir, implementar e gerenciar aplicativos conteinerizados.
A conteinerização desempenha um papel crucial no desenvolvimento de aplicações modernas. Neste vídeo, Chris Rosen apresenta quatro casos de uso para desenvolvimento de software e operações de TI para ajudar você a maximizar o desempenho e o tempo de atividade, minimizar os custos e manter a agilidade e a conformidade.
Kubernetes, também conhecido como k8s ou kube, é uma plataforma de orquestração de contêineres de código aberto para agendar e automatizar a implementação, o gerenciamento e o dimensionamento de aplicações conteinerizadas.
Balanceamento de carga é o processo de distribuição eficiente do tráfego de rede entre vários servidores para otimizar a disponibilidade de aplicativos e garantir uma experiência positiva para o usuário final.
Todos os links levam para fora do site ibm.com
1 Container Technology Market Size, Share, Growth, And Industry Analysis, By Type (Docker, Rkt, CRI-O, & Others), By Application (Monitoring, Data Management, Security, & Others), Regional Insights, and Forecast From 2024 To 2031, Business Research Insights, fevereiro de 2024.
2 A Brief History of Containers: From the 1970s Till Now, Aqua, 10 de janeiro de 2020.
3 https://linuxcontainers.org/
4 Sobre a Docker, Docker.
5 Projetos de código aberto, Docker.
7 Top 5 containerization technologies in 2024, 6sense.
8 Cloud Native Computing Foundation
9 Kubernetes Project Journey Report, CNCF, 8 de junho de 2023.