É Docker para todo lado, eventos, relatórios, previsões, sendo adotado por empresas gigantes, adotado por empresas visionárias e outras nem tanto. É a revolução dos containers, dizem alguns.
Mas onde exatamente essa revolução acontece e onde estão os benefícios?
Docker no desenvolvimento local e teste de aplicações
Se você está trabalhando sozinho em uma aplicação e testando na máquina local, seu desafio é se manter produtivo, não perdendo tempo com configurações ou pior, das dores de cabeça do famoso “ontem estava rodando na minha máquina, hoje não“, perdendo preciosas horas debugando para descobrir o que aconteceu.
Para o desenvolvedor individual é a garantia de que “se rodou na minha máquina hoje, irá rodar na minha maquina amanhã, assim como na hora do teste“.
Respondendo a pergunta inicial: Ganho de produtividade e de qualidade nas entregas.
Docker no desenvolvimento em equipe
Trabalhando em equipe o desafio fica um pouco maior, agora você tem uma equipe trabalhando em conjunto em um mesmo código e executando testes. É preciso rodar na sua máquina e rodar na máquina do colega.
Os problemas mais comuns envolvem conflitos de versão, diferenças nas bibliotecas instaladas e configurações. Aqui o prejuízo na produtividade tem impacto maior, pois agora envolve o tempo de uma equipe, projetos maiores, deadline, clientes e com efeito direto nos custos de produção.
Resposta: A consistência oferecida na containerização de aplicações, bibliotecas e configurações aumenta produtividade das equipes de desenvolvimento, removendo do dia a dia horas e mais horas perdidas resolvendo diferenças entre os ambientes.
Docker para CI/CD
Para CI/CD você precisa implementar e amarrar um conjunto de regras e ferramentas para lidar com diferentes regras de build, testes, necessidade de criar um ambiente limpo/novo a cada build, evitando possíveis contaminações de configurações anteriores e, por fim a entrega, onde você precisa ter definido um método para promover as imagens ao longo do pipeline dev > qa > production.
Resposta: Porque ninguém tem tempo para ficar configurando e mantendo Ansible/Chef/Puppet, setup de máquinas e outros componentes.
Docker para publicação de aplicações em produção
Publicar uma aplicação containerizada em ambiente de produção poderia ser resumido em:
Funciona na minha máquina > funciona em QA > funciona em produção
Porém estamos rodando em produção e, ao contrário de um ambiente de teste e desenvolvimento, agora você precisará lidar com SLA, disponibilidade, performance e segurança.
Dependendo da velocidade de desenvolvimento, pode ser necessário uma estratégia de rollback se você estiver fazendo inúmeros builds e deployments diários.
Se o volume de acesso for grande ou com picos sazonais, é preciso garantir que você conseguirá escalar o ambiente. Uma estratégia de auto-scaling e arquitetura de microserviços é mandatório.
Resposta: Rodar aplicações containerizadas coloca você mais próximo de alcançar as features descritas acima, porém a complexidade de implementação pode ser maior que o retorno alcançado.
Minha dica é: busque uma solução de PaaS ou IaaS que ofereça as ferramentas e métodos necessários e sem a complexidade de implementar você mesmo.
Docker rodando em uma plataforma (PaaS)
É comum haver certa confusão nessa área, alguns entendem Docker como uma plataforma, só que uma plataforma não se constrói com um único componente.
PaaS é muito mais do que simplesmente fazer o deploy de uma aplicação containerizada, PaaS é um serviço.
Oferece escalabilidade, automação de build, rollback, monitoramento e saúde das aplicações, métricas, gerenciamento de usuários/permissões/colaboração de equipes, gerenciamento de serviços, rotas externas, repositório privado de imagens – homologadas e mantidas atualizadas com correções de segurança.
Resposta: use PaaS e, para a maioria, consumir o serviço é mais rápido e econômico do que construir uma.
Se você é desenvolvedor ou operação de TI e está usando Docker, comente abaixo que ferramentas está usando e experiências.
Artigo publicado originalmente no blog da Getup
Sou Técnico em Redes de Computadores, e estou começando um curso de Laravel com LaraDock, onde espero aprender bastante sobre o componente Docker para assim poder oferecer suporte de qualidade os colegas desenvolvedores.