Quando utilizar contentores do Docker

Concluído

Como aprendemos, o Docker tem vários recursos para usarmos. Nesta unidade, analisamos os benefícios que o Docker proporciona às nossas equipas de programação e operações. Também veremos alguns cenários em que o Docker pode não ser a melhor escolha.

Estes aspetos vão ajudá-lo a decidir se o Docker é uma boa opção para a sua estratégia de contentorização.

Lembre-se de que há uma série de desafios que nossa equipe enfrenta ao desenvolver e publicar nosso portal de rastreamento de pedidos. Eles estão procurando uma solução para:

  • Gerencie nossos ambientes de hospedagem com facilidade.
  • Garantir a continuidade na forma como entregamos o nosso software.
  • Certifique-se de que fazemos uso eficiente do hardware do servidor.
  • Permitir a portabilidade das nossas aplicações.

O Docker é uma solução para estes desafios. Vamos analisar todos os benefícios que abordámos até agora.

Benefícios do Docker

Quando utilizamos o Docker, temos imediatamente acesso aos benefícios proporcionados pela contentorização.

Uso eficiente de hardware

Os contentores são executados sem a utilização de uma máquina virtual (VM). Como aprendemos, o contêiner depende do kernel do host para funções como sistema de arquivos, gerenciamento de rede, agendamento de processos e gerenciamento de memória.

Diagrama a contrastar a utilização de recursos da VM com a utilização de recursos do Docker.

Em comparação com uma VM, podemos ver que uma VM requer um sistema operacional instalado para fornecer funções de kernel para os aplicativos em execução dentro da VM. Tenha em mente que o sistema operativo da VM também requer espaço em disco, memória e tempo de CPU. Ao remover a VM e o requisito adicional do sistema operativo, podemos libertar recursos no sistema anfitrião e utilizá-lo para executar outros contentores.

Isolamento de contentores

Os contentores do Docker proporcionam funcionalidades de segurança para executar vários contentores simultaneamente no mesmo sistema anfitrião sem que uns afetem os outros. Como aprendemos, podemos configurar o armazenamento de dados e a configuração de rede para isolar nossos contêineres ou compartilhar dados e conectividade entre contêineres específicos.

Vamos comparar esta funcionalidade com a utilização de VMs.

Diagrama a mostrar um anfitrião físico a executar múltiplas VMs.

Suponhamos que temos um sistema anfitrião físico a executar duas VMs. Temos três aplicações que queremos executar isoladamente umas das outras. Decidimos implantar o primeiro aplicativo no VM1 e o segundo no VM2 para separar os dois aplicativos um do outro. Se agora optarmos por instalar a terceira aplicação, teremos de instalar outra VM para continuar esse padrão.

Portabilidade das aplicações

Os contêineres são executados em quase todos os lugares: desktops, servidores físicos, VMs e na nuvem. Essa compatibilidade de tempo de execução facilita a movimentação de aplicativos em contêineres entre diferentes ambientes.

Como os contêineres são leves, eles não sofrem com tempos de inicialização ou desligamento lentos, como as VMs. Esse aspeto torna a reimplantação e outros cenários de implantação, como escalonamento para cima ou para baixo, suaves e rápidos.

Disponibilização das aplicações

Com o Docker, o contentor torna-se a unidade que utilizamos para distribuir as aplicações. Esse conceito garante que tenhamos um formato de contêiner padronizado que nossas equipes de desenvolvimento e operações usam. Nossos desenvolvedores podem se concentrar no desenvolvimento de software, e a equipe de operações pode se concentrar na implantação e gerenciamento de software.

Podemos utilizar o contentor em todas as etapas do nosso sistema de implementação assim que a nossa equipa de programação lançar uma compilação da nossa aplicação. Os contentores são candidatos ideais para uma integração contínua e aceleram o tempo desde a construção até à produção.

Gerenciando ambientes de hospedagem

Configuramos o ambiente da aplicação internamente para o contentor. Esta contenção proporciona flexibilidade para que a nossa equipa de operações possa gerir o ambiente da aplicação com mais proximidade. Nossa equipe pode monitorar as atualizações do sistema operacional, aplicar patches de segurança uma vez e implementar o contêiner atualizado conforme necessário.

A nossa equipa também pode gerir quais as aplicações a instalar, atualizar e remover sem afetar outros contentores. Cada contentor está isolado e os seus limites de recursos são atribuídos separadamente de outros contentores.

Implementações na cloud

Os contêineres do Docker são a arquitetura de contêiner padrão que os serviços de conteinerização do Azure usam, e muitas outras plataformas de nuvem também oferecem suporte a eles.

Por exemplo, você pode implantar contêineres do Docker em Instâncias de Contêiner do Azure, Serviço de Aplicativo do Azure e Serviços Kubernetes do Azure. Cada uma destas opções proporciona diferentes funcionalidades e capacidades.

Por exemplo, as instâncias de contentores do Azure (Azure Container Instances) permitem que se concentre na conceção e compilação das suas aplicações sem a sobrecarga da gestão da infraestrutura. Quando você tem muitos contêineres para orquestrar, o serviço Kubernetes do Azure facilita a implantação e o gerenciamento de implantações de contêineres em grande escala.

Quando não deve utilizar contentores do Docker

Os contêineres do Docker oferecem muitos benefícios, mas lembre-se de que os contêineres podem não atender a todas as suas necessidades. Há alguns aspetos a considerar.

Segurança e virtualização

Os contentores proporcionam um nível de isolamento. No entanto, os contentores partilham um kernel de SO de um sistema anfitrião único, que pode constituir um único ponto de ataque.

Os hosts Windows fornecem um modelo de isolamento adicional no qual uma VM criada especificamente pode ser usada para isolar o contêiner no nível do hipervisor. Esse modo é chamado de modo de isolamento do Hyper-V e adiciona outra camada de segurança entre contêineres e host de contêiner.

Temos também de ter em conta aspetos como o armazenamento e as redes, a fim de garantir que consideramos todos os aspetos de segurança. Por exemplo, todos os contêineres usam a rede bridge por padrão e podem acessar uns aos outros via endereço IP.

Nem todas as aplicações beneficiam da contentorização. Nesses casos, pode fazer mais sentido usar uma VM.

Monitorização do serviço

O gerenciamento de aplicativos e contêineres é mais complicado do que as implantações de VM tradicionais. Há recursos de registro em log que nos informam sobre o estado dos contêineres em execução, mas informações mais detalhadas sobre os serviços dentro do contêiner são mais difíceis de monitorar.

Por exemplo, o Docker fornece-nos o comando docker stats. Este comando retorna informações para o contêiner, como porcentagem de uso da CPU, porcentagem de uso de memória, E/S gravada no disco, dados de rede enviados e recebidos e IDs de processo atribuídos. Esta informação é útil como um fluxo de dados imediato; no entanto, nenhuma agregação é feita, porque os dados não são armazenados. Teríamos que instalar software de terceiros para captura de dados significativa durante um período de tempo.