Docker: O que é? Como usar? Serve para mim?

1024 356 Microservice

Conteinerização, containers, Docker. Palavras extremamente utilizadas nos dias de hoje. Você realmente sabe o que é? Elas são realmente aderentes à sua empresa? Todos podem utilizar esta tecnologia? Nossa intenção neste artigo é responder estas perguntas de forma clara e lhe conduzir a um melhor entendimento sobre esta poderosa ferramenta para DevOps e DEVs SysAdmins em sua empresa. 

Em seu conceito mais simplista o Docker é uma forma de virtualizar aplicações no conceito de “containers, trazendo da web ou de seu repositório interno uma imagem completa incluindo todas as dependências necessárias para executar sua aplicação. Sim, você leu certo, TODAS as dependências! Incluindo as referentes ao sistema operacional. 

Após ler o item acima você deve estar pensando “Qual a diferença entre Containers em Docker e uma VM (Virtual Machinepadrão?”. É bem simples! Uma VM obriga você a gerenciar todo o ambiente relacionado ao servidor, tal como: 

  • Configuração de sistema operacional; 
  • Atualizações do Sistema operacional;
  • Patches de segurança; 
  • Patches da aplicação;
  • Backup do Sistema operacional; 
  • Backup da aplicação.

Com o Docker temos as mesmas preocupações, mas de forma reduzida. A vinda do Docker proporciona agilidade nos itens acima mencionados que muitos SysAdmin não têm: um ambiente descartávelescalável e o melhor de tudo, seguindo o mesmo padrão de configuração. Pensando na ótica operacional de uma VM, além de demandar uma capacidade de hardware maior e todo o tempo de preparação, usando containers com o Docker este tempo e espaço são reduzidos drasticamente, de Gigas e gigas em espaço para alguns Mega, dependendo da aplicação escolhida. 

 Na imagem abaixo podemos ver a diferença da arquitetura entre a utilização de containers e VM´s. 

  • Analisando a imagem acima vemos a principal diferença da arquitetura do ambiente: ao utilizarmos o ambiente com VMs (ilustração à esquerda) temos um servidor completo para cada aplicaçãoCada aplicativo possui um sistema de operação completo, com todas as atividades administrativas relacionadas ao OS e também de suas respectivas aplicações.  Dimagem referente ao Docker Engine (ilustração a direita) não temos a camada de sistema operacional para cada app pois ela é compartilhada entre todos os containers pelo Docker, desta forma não temos preocupação administrativa sobre o OS para cada app.

Como tudo no ambiente de TI, os riscos de falha ou de um “crash” são inevitáveis e inegáveis, porém se sua aplicação usa um container, simplesmente efetuar um novo “pull” da imagem resolverá o seu problema! Uma nova imagem completa é baixada livre da falha ocorrida na anterior, sem a necessidade de executar complexos troubleshooting sobre o ocorrido, apenas descartamos o container falho e o substituímos por um novo. 

Você também pode se interessar por este conteúdo: 👉6 desafios de dados na nuvem resolvidos para administradores de banco de dados

As aplicações de muitas empresas ainda são baseadas em bare-metal por natureza e demandam de uma equipe grande para a gerência, tendo mais de 3 vezes os SySAdmins necessários para administrar seu ambiente com a performance e disponibilidade desejadas. 

A aderência gerada por uma adaptação a esta tecnologia pode ser enorme para uma empresa, possibilitando ao SySAdminDevOps e Devs mais tempo para produção de melhorias no ambiente e na estrutura em si, ao invés de gastarem todo o tempo necessário mantendo as VMs à moda antiga. 

Caro leitor, entenda que não estamos levantando uma bandeira em que todo o seu data-center deve ser baseado em containers ou algo do tipo, e sim abrindo uma nova possibilidade de utilização. Nem todas as aplicações são compatíveis com a tecnologia e sua administração também requer certos cuidados. 

Ao longo do tempo nesta jornada no mundo DevOps vemos diversos colegas utilizando containers da forma errada, pensando que a tecnologia foi feita para ser tão resiliente quanto seu cluster local baseado em tecnologias de ponta e afins. 

Este é o maior engano neste assunto, em seu CORE os Containers são feitos para serem descartáveis, ou seja, apresentou problema? Descarte-o e faça o pull (download) de uma nova imagem. Isso fará que a aplicação volte a ser íntegra. Mas, e os dados armazenados neste container? Você já se perguntou isso? 

Bem, infelizmente se o administrador do ambiente não pensou neste detalhe tudo que foi armazenado no container será excluído junto com ele… Existem formas de se efetuar o mapeamento de pastas da máquina host do container, ou seja, você pode mapear uma pasta para arquivos de configuração de sua aplicação e outra pasta para o arquivo de dados por exemplo, com isso se algo acontecer com seu ambiente conteinerizado você tem tudo o que é importante no host, pronto para ser utilizado por novos containers. 

A intenção é entregar mais agilidade escalabilidade, agregando uma camada extra de complexidade no ambiente. Afinal você tem um novo virtualizador dentro de sua máquina já virtualizada, o que vai gerar uma administração extra, uma estratégia de back-up, e ainda uma possível implantação de um cluster para garantir que se um servidor host falhar o outro é totalmente capaz e já está pronto para assumir todos os containers necessários para seu ambiente/aplicação. 

Em nosso próximo artigo traremos informações e mais aprofundado a questão de escalabilidade utilizando Docker compose com exemplos práticos de como trabalhar e criar um ambiente resiliente, e escalável. 

Ficamos à disposição para ajudá-los no uso de Containers ou na implantação da tecnologia em sua empresa! 

 

Paulo Frugis Neto

Arquiteto de Soluções Cloud Computing | P.O  | Tech lead 

MATRIZ - BLUMENAU / SC (47) 3322-2343   |  DEMAIS LOCALIDADES:   SP (11) 4063-8108 | RJ (21) 4063-3343 MG (31) 4063-7161 PR (41) 4063-7161 RS (51) 4063-7161 PE (81) 4062-9072