O que é um contêiner?
Empacotamento padronizado e portátil para os seus aplicativos.
Sobre os contêineres
Da mesma forma que empresas de logística usam contêineres físicos para isolar diferentes cargas para transporte em navios e trens, as tecnologias de desenvolvimento de software cada vez mais usam um conceito chamado de conteinerização.
Um único pacote de software, conhecido como um contêiner, agrupa o código de um aplicativo e os respectivos arquivos de configuração e bibliotecas necessários para a execução do aplicativo. Assim, os desenvolvedores e os profissionais de TI podem implantar aplicativos diretamente nos ambientes.
Por que você deve se preocupar com contêineres
O problema do aplicativo que não é executado corretamente quando migrado de um ambiente para outro é tão antigo quando o próprio desenvolvimento de software. Normalmente, esses problemas surgem por causa de diferenças na configuração dos requisitos da biblioteca subjacente e outras dependências.
Os contêineres resolvem esse problema ao fornecer uma infraestrutura leve e imutável para o empacotamento e a implantação de aplicativos. Um aplicativo ou um serviço, suas dependências e sua configuração são empacotados juntos, como uma imagem de contêiner. O aplicativo conteinerizado pode ser testado como uma unidade e implantado como uma instância de imagem de contêiner no sistema operacional do host.
Dessa forma, os contêineres permitem que os desenvolvedores e profissionais de TI implantem aplicativos em ambientes com pouca ou nenhuma modificação.
Saiba mais sobre a criação e as vantagens dos contêineres.
Contêiner contra máquina virtual
Ao considerar a virtualização, normalmente as pessoas pensam nas VMs (máquinas virtuais). Na verdade, a virtualização pode assumir muitas formas, e os contêineres são uma delas. Então, qual é a diferença entre VMs e contêineres?
Em um alto nível, as VMs virtualizam o hardware subjacente para que várias instâncias do SO (sistema operacional) 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 muitos benefícios. Entre eles, a capacidade de executar diferentes sistemas operacionais no mesmo servidor, o uso mais eficiente e econômico de recursos físicos e provisionamento de servidor mais rápido. Por outro lado, cada VM contém uma imagem de SO, bibliotecas, aplicativos e muito mais. Portanto, podem ser bem grandes.
O contêiner virtualiza o SO subjacente e faz com que o aplicativo conteinerizado detecte que o SO (incluindo CPU, memória, armazenamento de arquivos e conexões de rede) está totalmente à sua disposição. Como as diferenças no SO subjacente e na infraestrutura são abstraídas, enquanto a imagem base for consistente, o contêiner poderá ser implantado e executado em qualquer local. Para os desenvolvedores, isso é muito atrativo.
Como os contêineres compartilham o SO hospedado, não precisam inicializar um SO ou carregar bibliotecas. Por isso, os contêineres são muito mais eficientes e leves. Os aplicativos conteinerizados podem ser inicializados em questão de segundos e muito mais instâncias do aplicativo podem se ajustar ao computador em comparação com um cenário de VM. A abordagem de SO compartilhado tem o benefício adicional de reduzir a sobrecarga no que diz respeito à manutenção, como a aplicação de patches e as atualizações.
Embora os contêineres sejam portáteis, são restritos ao sistema operacional para o qual foram definidos. Por exemplo, um contêiner do Linux não pode ser executado no Windows e vice-versa.
Por que os contêineres
Agilidade
Quando um desenvolvedor cria e empacota um aplicativo em contêineres e o encaminha à TI para execução em uma plataforma padronizada, isso reduz o esforço geral de implantação de aplicativo e pode simplificar todo o ciclo de desenvolvimento e teste. Além disso, pode aumentar a colaboração e a eficiência entre as equipes de desenvolvimento e operações para enviar aplicativos mais rapidamente.
Portabilidade
Os contêineres fornecem um formato padronizado para empacotamento e retenção de todos os componentes necessários para executar o aplicativo desejado. Isso resolve o problema comum de "Funciona no meu computador" e permite a portabilidade entre plataformas de SO e entre nuvens. Sempre que um contêiner é implantado em qualquer lugar, ele é executado em um ambiente consistente que permanece inalterado de uma implantação para outra. Agora você tem um formato consistente, do computador de desenvolvimento para a produção.
Escalabilidade rápida
Como os contêineres não têm a sobrecarga típica das VMs, incluindo as instâncias de SO diferentes, muito mais contêineres podem ser disponibilizados na mesma infraestrutura. A leveza dos contêineres significa que eles podem ser iniciados e interrompidos rapidamente, possibilitando cenários rápidos para escalar ou reduzir verticalmente.
Casos de uso
Aplicativos nativos de nuvem
Os aplicativos nativos de nuvem contam com contêineres para um modelo operacional comum entre ambientes, incluindo público, privado e híbrido. A baixa sobrecarga e a alta densidade dos contêineres permitem que muitos deles sejam hospedados dentro da mesma máquina virtual e os tornam ideais para fornecer aplicativos nativos de nuvem.
Lift-and-shift
Uma organização pode ter grandes benefícios ao migrar para a nuvem, mas talvez não queira gerar um aplicativo novamente. Com os contêineres, é possível migrar os aplicativos para a nuvem sem alterar o código.
Lote
O processamento em lotes refere-se a atividades que podem ser feitas sem intervenção humana ou em uma base de recursos disponíveis. Os exemplos incluem a geração de relatórios, o redimensionamento de imagens e a conversão de arquivos de um formato para outro. Os contêineres são uma maneira fácil de executar trabalhos em lotes sem a necessidade de gerenciar um ambiente e as dependências. As opções de computação dinâmica, como as ACI (Instâncias de Contêiner do Azure), podem ser usadas para ingerir de modo eficiente dados de origem, processá-los e colocá-los em um armazenamento durável, como o Armazenamento de Blobs do Azure. Usar essa abordagem em vez das máquinas virtuais provisionadas pode gerar economias de custo por meio da cobrança por segundo.
Aprendizado de máquina
O aprendizado de máquina aplica algoritmos aos dados e faz previsões com base nos padrões encontrados nos dados. Os contêineres podem tornar os aplicativos de aprendizado de máquina autossuficientes e facilmente escalonáveis em qualquer ambiente.
Além dos contêineres
Orquestração
A execução de contêineres em escala requer orquestração e gerenciamento de aplicativos distribuídos e conteinerizados por meio de uma plataforma de orquestração, como o Kubernetes.
Segurança
Os contêineres precisam de uma abordagem de camadas, da imagem de contêiner ao isolamento do cluster. A configuração dessas proteções é mais bem definida com os pipelines de CI/CD.
Contêineres sem servidor
Aumente a agilidade com contêineres sob demanda. Use as tecnologias de contêiner sem servidor para executar facilmente os contêineres com o gerenciamento de servidores e a intermitência dos clusters do Kubernetes nos picos de tráfego.
DevOps
Os contêineres permitem que os desenvolvedores compartilhem facilmente software e dependências em ambientes de produção e de TI. Quando combinados com as práticas de DevOps, é possível efetivamente fornecer código com mais rapidez e reduzir os ciclos de desenvolvimento de software.