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 "transporte em contêineres".

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.

Introdução ao Docker

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 em contêiner pode ser testado como uma unidade e implantado como uma instância de imagem de contêiner no sistema operacional 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.

Assista a um vídeo curto

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 em contêiner 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 em contêineres podem ser inicializados em questão de segundos e muito mais instâncias do aplicativo podem se ajustar à máquina 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, da caixa 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.

Use casos

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 escrever 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 tarefas em lote 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.

Machine learning

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

Para maximizar os benefícios dos contêineres, considere soluções completas, como ferramentas e serviços otimizados para contêiner que ajudam a ter agilidade, segurança e escala.

Orquestração

A execução de contêineres em escala requer orquestração e gerenciamento de aplicativos distribuídos e em contêineres por meio de uma plataforma de orquestração, como o Kubernetes.

Explore o Kubernetes com o Azure

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.

Confira os princípios básicos de segurança para contêineres e o Kubernetes

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.

Experimente os contêineres sem servidor

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.

Confira o guia de DevOps com o Azure

Referências

Basta começar: experimente os contêineres e o Kubernetes gratuitamente com o Azure