O que é um contentor?
Empacotamento padronizado e portátil para as suas aplicações.
Explicação sobre os contentores
Tal como as indústrias de transporte utilizam contentores físicos para isolar as diferentes mercadorias, por exemplo, para transporte em navios e comboios, as tecnologias de desenvolvimento de software recorrem cada vez mais a uma abordagem denominada contentorização.
Um pacote standard de software, conhecido como contentor, agrupa o código de uma aplicação juntamente com os ficheiros de configuração, as bibliotecas e as dependências associadas necessárias à execução da aplicação. Isto permite aos programadores e profissionais de TI implementar aplicações facilmente em todos os ambientes.
Motivo pelo qual se deve preocupar com os contentores
O problema de uma aplicação não ser executada corretamente quando é movida de um ambiente para outro é tão antigo como o próprio desenvolvimento de software. Estes problemas surgem normalmente devido a diferenças nos requisitos de biblioteca subjacentes da configuração e outras dependências.
Os contentores abordam este problema ao fornecer uma infraestrutura leve e imutável para o empacotamento e implementação de aplicações. Uma aplicação ou serviço, as respetivas dependências e configuração são empacotadas como uma imagem de contentor. A aplicação contentorizada pode ser testada como unidade e implementada como uma instância de imagem de contentor no sistema operativo anfitrião.
Desta forma, os contentores permitem aos programadores e profissionais de TI implementar aplicações em ambientes com pouca ou nenhuma modificação.
Saiba mais sobre a génese e a beleza dos contentores.
Contentor vs. máquina virtual
Quando as pessoas pensam em virtualização, as máquinas virtuais (VMs) vêm muitas vezes à mente. Na verdade, a virtualização pode assumir muitas formas e os contentores são uma delas. Qual é a diferença entre VMs e contentores?
A um nível elevado, as VMs virtualizam o hardware subjacente para que várias instâncias do sistema operativo (SO) possam ser executadas no hardware. Cada VM executa um SO e tem acesso a recursos virtualizados que representam o hardware subjacente.
As VMs têm inúmeros benefícios. Estes incluem a capacidade de executar diferentes sistemas operativos no mesmo servidor, uma utilização mais eficiente e rentável dos recursos físicos e um aprovisionamento mais rápido do servidor. Por outro lado, cada VM contém, por exemplo, uma imagem de SO, bibliotecas e aplicações, e pode tornar-se bastante grande.
Um contentor virtualiza o SO subjacente e faz com que a aplicação contentorizada perceba que contém o SO, incluindo CPU, memória, armazenamento de ficheiros e ligações de rede, à sua disposição. Como as diferenças no SO subjacente e na infraestrutura são abstratas, desde que a imagem base seja consistente, o contentor pode ser implementado e executado em qualquer local. Para os programadores, isto é incrivelmente apelativo.
Uma vez que os contentores partilham o SO anfitrião, não precisam de arrancar um SO nem carregar bibliotecas. Isto permite que os contentores sejam muito mais eficientes e leves. As aplicações contentorizadas podem ser iniciadas em segundos e muitas mais instâncias da aplicação podem caber na máquina em comparação com um cenário de VMs. A abordagem de SO partilhado tem o benefício adicional de reduzir o overhead no que diz respeito à manutenção, como aplicação de patches e atualizações.
Embora os contentores sejam portáteis, estão limitados ao sistema operativo para o qual estão definidos. Por exemplo, um contentor para Linux não pode ser executado no Windows e vice-versa.
Porquê Contentores
Agilidade
Ao criarem e empacotarem as aplicações em contentores e ao fornecê-las para TI para serem executadas numa plataforma padronizada, os programadores conseguem reduzir o esforço global da implementação de aplicações e simplificar o ciclo de desenvolvimento e teste. Isto também aumenta a colaboração e a eficiência entre as equipas de desenvolvimento e operações para enviarem aplicações mais rapidamente.
Portabilidade
Os contentores fornecem um formato padronizado para empacotamento e manutenção de todos os componentes necessários para executar a aplicação desejada. Isto resolve o problema típico de "Funciona no meu computador" e permite a portabilidade entre plataformas de SO e entre nuvens. Sempre que um contentor é implementado em qualquer local, é executado num ambiente consistente que permanece inalterado de uma implementação para outra. Dispõe agora de um formato consistente, desde o computador de desenvolvimento à produção.
Rápida escalabilidade
Uma vez que os contentores não têm o overhead típico das VMs, incluindo instâncias de SO separadas, é possível suportar muitos mais contentores na mesma infraestrutura. A natureza leve dos contentores significa que podem ser iniciados e parados rapidamente, o que permite desbloquear cenários de aumento e redução verticais.
Casos de Utilização
Aplicações nativas da nuvem
As aplicações nativas da nuvem dependem de contentores para um modelo operacional comum nos ambientes, incluindo público, privado e híbrido. O baixo overhead e a alta densidade dos contentores permitem que muitos deles sejam alojados na mesma máquina virtual e torna-os ideais para fornecimento de aplicações nativas da nuvem.
Lift-and-shift
Uma organização pode obter benefícios significativos ao migrar para a nuvem, mas pode não querer reescrever uma aplicação existente. Com contentores, pode potencialmente migrar as suas aplicações para a nuvem sem alterar qualquer código.
Lotes
O processamento em lotes refere-se a atividades que podem ser realizadas sem intervenção humana ou consoante a disponibilidade dos recursos. Os exemplos incluem gerar relatórios, redimensionar imagens e converter ficheiros de um formato para outro. Os contentores proporcionam uma forma fácil de gerir tarefas de lote sem ter de gerir um ambiente e dependências. É possível utilizar opções de computação dinâmica, como o Azure Container Instances (ACI), para ingerir eficientemente dados de origem, processá-los e colocá-los num arquivo durável, como o Armazenamento de Blobs do Azure. A utilização de uma abordagem deste tipo em vez de máquinas virtuais aprovisionadas de forma estática pode alcançar poupanças significativas através da faturação ao segundo.
Aprendizagem automática
A aprendizagem automática aplica algoritmos aos dados e faz previsões com base nos padrões encontrados nos dados. Os contentores podem tornar as aplicações de aprendizagem automática autónomas e facilmente dimensionáveis em qualquer ambiente.
Além dos contentores
Orquestração
A execução de contentores em escala requer orquestração e gestão de aplicações distribuídas e contentorizadas através de uma plataforma de orquestração, como o Kubernetes.
Segurança
Os contentores requerem uma abordagem em camadas, desde a imagem de contentor ao isolamento do cluster. A configuração destas proteções é mais adequada para os seus pipelines CI/CD.
Contentores sem servidor
Pode aumentar ainda mais a agilidade com contentores a pedido. Utilize tecnologias de contentores sem servidor para executar facilmente contentores sem ter de gerir servidores e fazer uma rajada a partir dos seus clusters do Kubernetes quando o tráfego surgir em picos.
DevOps
Os contentores permitem aos programadores partilhar facilmente software e dependências em ambientes de TI e produção. Quando combinados com práticas de DevOps, pode enviar código de forma eficaz mais rapidamente e reduzir os ciclos de desenvolvimento de software.