Quando usar contêineres do Docker

Concluído

Como aprendemos, o Docker tem vários recursos que devemos usar. Aqui, veremos os benefícios oferecidos pelo Docker às nossas equipes de desenvolvimento e operações. Também veremos alguns cenários em que o Docker pode não ser a melhor escolha.

Esses aspectos ajudarão você a decidir se o Docker é uma boa opção para sua estratégia de transporte em contêineres.

Lembre-se de que, anteriormente, mencionamos que há uma série de desafios que nossa equipe enfrenta à medida que desenvolve e publica nosso portal de rastreamento de pedidos. Eles estão procurando uma solução para:

  • Gerenciar nossos ambientes de hospedagem com facilidade.
  • Garantir a continuidade na forma como fazemos para entregar nosso software.
  • Garantir que utilizemos o hardware do servidor de forma eficiente.
  • Permitir a portabilidade dos nossos aplicativos.

O Docker é uma solução para esses desafios. Vamos dar uma olhada em todos os benefícios que abordamos até agora.

Benefícios do Docker

Quando usamos o Docker, obtemos imediatamente acesso à oferta de benefícios de transporte em contêineres.

Uso eficiente do hardware

Os contêineres são executados sem o uso de uma VM (máquina virtual). Como você aprendeu, 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 que compara o uso de recursos da VM com o uso de recursos do Docker.

Em comparação com uma VM, podemos ver que uma VM exige um SO instalado para fornecer funções do kernel aos aplicativos em execução dentro da VM. Tenha em mente que o sistema operacional da VM também exige espaço em disco, memória e tempo de CPU. Ao remover a VM e o requisito de sistema operacional adicional, podemos liberar recursos no host e usá-lo para executar outros contêineres.

Isolamento de contêiner

Os contêineres do Docker fornecem recursos de segurança para executar vários contêineres simultaneamente no mesmo host sem afetar os outros. Como aprendemos, podemos configurar tanto o armazenamento de dados quanto a configuração da rede para isolar nossos contêineres ou compartilhar dados e conectividade entre contêineres específicos.

Vamos comparar esse recurso com o uso de VMs.

Diagrama que mostra um host físico executando várias VMs.

Suponha que tenhamos um host físico executando duas VMs. Temos três aplicativos que desejamos executar isolados uns dos outros. Decidimos implantar o primeiro aplicativo na VM1 e o segundo na VM2 para separar os dois aplicativos um do outro. Se agora optarmos por instalar o terceiro aplicativo, precisaremos instalar outra VM para continuar esse padrão.

Portabilidade do aplicativo

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

Como os contêineres são leves, eles não sofrem com períodos lentos de inicialização ou desligamento como as VMs. Esse aspecto torna a reimplantação e outros cenários de implantação, como escalado ou reduzido verticalmente, suaves e rápidos.

Distribuição de aplicativos

Com o Docker, o contêiner torna-se a unidade que usamos para distribuir aplicativos. Esse conceito garante que temos 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 no gerenciamento de software.

Podemos usar o contêiner em todas as etapas de nosso sistema de implantação depois que a equipe de desenvolvimento liberar um build do aplicativo. Os contêineres são candidatos ideais para a integração contínua e aceleram o tempo entre a criação e a produção.

Gerenciar ambientes de hospedagem

Configuramos o ambiente do aplicativo internamente para o contêiner. Essa independência fornece flexibilidade para que nossa equipe de operações gerencie muito mais de perto o ambiente do aplicativo. Nossa equipe pode monitorar as atualizações do SO, aplicar patches de segurança uma vez e implantar o contêiner atualizado conforme necessário.

Nossa equipe também pode gerenciar quais aplicativos serão instalados, atualizados e removidos sem afetar outros contêineres. Cada contêiner é isolado e tem seus limites de recursos atribuídos separadamente de outros contêineres.

Implantações de nuvem

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

Por exemplo, você pode implantar contêineres do Docker nas Instâncias de Contêiner do Azure, no Serviço de Aplicativo do Azure e nos Serviços de Kubernetes do Azure. Cada uma dessas opções fornece recursos e funcionalidades diferentes.

Por exemplo, as Instâncias de Contêiner do Azure permitem que você se concentre no design e na criação de seus aplicativos sem a sobrecarga de gerenciar a infraestrutura. Quando você tem muitos contêineres para orquestrar, o serviço de Kubernetes do Azure facilita a implantação e gerenciamento de implantações de contêiner em grande escala.

Quando não usar os contêineres do Docker

Os contêineres do Docker oferecem muitos benefícios, mas lembre-se de que os contêineres podem não atender a todos os seus requisitos. Há alguns aspectos a serem considerados.

Segurança e virtualização

Os contêineres fornecem um nível de isolamento. No entanto, os contêineres compartilham um único kernel do sistema operacional host, que pode ser um ponto único de ataque.

Os hosts do Windows fornecem um modelo de isolamento adicional no qual uma VM criada com finalidade 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 os contêineres e seus hosts.

Também precisamos levar em conta aspectos como armazenamento e redes para verificar se consideramos todos os aspectos de segurança. Por exemplo, todos os contêineres usam a rede de ponte por padrão e podem acessar uns aos outros por meio do endereço IP.

Nem todos os aplicativos se beneficiam da conteinerização. Nesses casos, talvez faça mais sentido utilizar uma VM.

Monitoramento do serviço

Gerenciar os aplicativos e os contêineres é mais complicado ao invés das implantações tradicionais de VM. Existem recursos de registro em log que nos informam sobre o estado dos contêineres em execução, mas é mais difícil monitorar informações mais detalhadas sobre os serviços dentro do contêiner.

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