Quando usar contêineres do Docker

Concluído

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

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, nossa equipe enfrentou vários desafios ao desenvolver e publicar nosso portal de acompanhamento de pedidos. Ela estava procurando uma solução para:

  • Gerenciar nossos ambientes de hospedagem com facilidade
  • Garantir a continuidade na forma como entregamos nosso software
  • Garantir nosso uso eficiente do hardware do servidor
  • Permitir a portabilidade de 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 de hardware

Os contêineres são executados sem o uso de uma VM (máquina virtual). Como vimos, 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, vemos que uma VM exige um sistema operacional instalado para fornecer funções de 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 vimos, 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 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 VM 1 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, áreas de trabalho, servidores físicos, VMs e na nuvem. Essa compatibilidade de runtime facilita a movimentação de aplicativos em contêineres entre ambientes diferentes.

Como os contêineres são leves, eles não sofrem com tempos de inicialização ou desligamento lentos como as VMs. Esse aspecto faz com que a reimplantação e outros cenários de implantação, como escalar ou reduzir verticalmente, sejam estáveis 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 tenhamos um formato de contêiner padronizado usado por nossas equipes de desenvolvedores e operações. Nossos desenvolvedores podem se concentrar no desenvolvimento de software, e a equipe de operações, 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 de build até a produção.

Gerenciamento de 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 sistema operacional e aplicar os patches de segurança uma vez e distribuir 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 usada nos serviços de transporte em contêineres do Azure e são compatíveis com muitas outras plataformas de nuvem.

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 no Serviço 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. Além disso, quando você tem muitos contêineres para orquestrar, o Serviço de Kubernetes do Azure facilita a implantação e o gerenciamento de implantações de contêiner em larga escala.

Quando não usar os contêineres do Docker

Os contêineres do Docker nos fornecem muitos benefícios, como vimos. Tenha em mente 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.

Também precisamos levar em conta os aspectos de configuração, como armazenamento e redes, para garantir que consideremos todos os aspectos de segurança. Por exemplo, todos os contêineres usarão a rede de ponte por padrão e poderão ter acesso uns aos outros por meio do endereço IP.

Nem todos os aplicativos se beneficiarão do transporte em contêineres. Nessas instâncias, pode fazer mais sentido usar uma VM.

Monitoramento do serviço

O gerenciamento de aplicativos e contêineres é mais complicado do que as implantações de VM tradicionais. Existem recursos de log que nos informam sobre o estado dos contêineres em execução. No entanto, informações mais detalhadas sobre os serviços no contêiner são mais difíceis de serem monitoradas.

Por exemplo, o Docker nos fornece o comando docker stats. Esse comando retorna informações para o contêiner, como percentual de uso da CPU, percentual de uso de memória, E/S gravada em disco, dados de rede enviados e recebidos e IDs de processo atribuídas. 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. Precisaremos instalar um software de terceiros para obter uma captura de dados significativa em um período de tempo.