17
abr 17

Agilize seu processo com Docker

Agilize seu processo com Docker

Quem tem a oportunidade de utilizar o Docker percebe prontamente que existe muito potencial a ser explorado. Você pode configurar rapidamente uma infraestrutura de servidores que levaria horas, talvez dias, dependendo do quão burocrático é o seu ambiente de trabalho.

Entretanto, com tantas possibilidades, muitas pontas acabam ficando soltas, e sobram as dúvidas: Quais são as melhores práticas? Como utilizar efetivamente para fazer facilitar o seu trabalho no dia a dia? Será que vale a pena integrar Docker aos processos já estabelecidos?

Nós aqui na SoftDesign resolvemos investir na utilização do Docker por dois motivos principais: (1) queremos fazer um uso mais racional dos nossos recursos de hardware; (2) acreditamos que com isso ganhamos mais agilidade e qualidade em nossos projetos.

Provavelmente existem mais pessoas com os mesmos dilemas e por esse motivo resolvemos escrever sobre os nossos desafios e descobertas, deixando a porta aberta para quem quiser comentar, tiver vontade de colaborar e aprender conosco.

O que é o Docker?

Docker é uma plataforma baseada em containers de software, cujo objetivo é resolver alguns dos problemas comuns que ocorrem nos diversos aspectos da produção de um software, desde o desenvolvimento, operação e entrega em produção.

POR QUE UTILIZAR CONTAINERS?
Basicamente, porque os containers são ambientes portáveis e isolados, que permitem aos desenvolvedores empacotar aplicações com todos os recursos e bibliotecas que as mesmas demandam. Neste sentido, eles são parecidos com servidores dedicados ou com máquinas virtuais (VM).
Entretanto, diferente de uma VM, um container não necessita de um sistema operacional completo, apenas as partes indispensáveis para o funcionamento do software a ser executado. Ou seja, os containers são muito mais leves e eficientes do que um servidor ou uma VM.

Pode-se dizer que o Docker expõe mais claramente a relação tão próxima que há entre o software e o ambiente necessário para a sua execução. Isso torna possível “versionar o hardware” onde nosso sistema será executado, tornando o processo de desenvolvimento muito mais previsível e menos propenso aos bugs.

A consequência para os times de desenvolvimento é que o Docker elimina os problemas do tipo “mas na minha máquina está funcionando”, que inevitavelmente ocorrem em projetos de software com diversos colaboradores e papéis envolvidos. Isto porque é possível compartilhar ambientes pré-configurados com o software a ser executado, de forma que todos os membros da equipe executem o sistema exatamente na mesma configuração.

Na ponta final, ou seja, quando o software está pronto para entrar em produção, também já existem opções de PaaS (ver Platform as a Service) para Docker, que permitem a implantação em produção diretamente em containers, aumentando ainda mais a produtividade e reduzindo a chance da introdução de bugs durante a transição para o ambiente de produção (lembra do “funciona na minha máquina”?).

A figura abaixo traz uma representação gráfica da diferença entre as abordagens utilizando Containers Docker e a mesma solução rodando em máquinas virtuais.

DockerVSVM

Como foram os primeiros passos da SoftDesign utilizando Docker

O processo de desenvolvimento na SoftDesign, dependendo do tipo de projeto (escopo aberto ou fechado), pode utilizar método ágil ou tradicional. A maioria dos projetos compreende, pelo menos, os seguintes passos de iniciação:

  • Configuração de ambiente de desenvolvimento para cada desenvolvedor/testador;
  • Configuração dos repositórios de versionamento (Git);
  • Criação e configuração do ambiente de testes homologação internos;
  • Configuração dos jobs de integração contínua.

Por iniciativa da equipe de desenvolvedores, a SoftDesign começou a utilizar Docker nos ambientes de desenvolvimento locais para facilitar sua configuração, primeiro item da lista acima. Isso foi feito em um projeto de uma aplicação cliente x servidor, desenvolvida em Python + Django e banco de dados Oracle. Todos estes componentes foram configurados usando Docker e Docker-Compose.

Com esta experiência bem sucedida, nos pareceu natural que os ambientes de integração contínua do projeto também fossem configurados utilizando Docker, de forma que a mesma infraestrutura de software fosse executada na máquina do desenvolvedor, no ambiente de testes e no ambiente de homologação que disponibilizamos para os clientes.

As vantagens imediatas percebidas foram:

  • Redução na complexidade dos jobs de integração contínua (Jenkins);
  • Melhor uso dos recursos dos servidores de desenvolvimento;
  • Menor número de erros decorrentes de configuração de ambientes.

Você pode estar se perguntando: “Mas, existem desvantagens?“. Claro que encontramos alguns obstáculos, como por exemplo a curva de aprendizado acentuada e a grande diversidade de ferramentas e plataformas existentes. Em um primeiro momento nos dá aquela sensação de criança na loja de brinquedos do shopping, mas que, infelizmente, logo se torna a mesma criança perdida no shopping chamando pela mãe nos auto-falantes da loja. Isso porque ter tantas opções não torna mais fácil traçar qual será a combinação correta para obter a solução ideal.

O certo é que aprendemos muito com as primeiras experiências e ainda vamos aprender muito ao longo do caminho. A nossa intenção é continuar postando sobre esta jornada aqui no blog, então fiquem ligados.

O que nos aguarda no futuro?

Após este início bem sucedido, decidimos adotar a mesma estrutura para alguns novos projetos e começamos a trabalhar em formas de manter esta estrutura escalável e gerenciável. Isto é o presente: estamos escolhendo as melhores ferramentas e práticas para reduzir ao mínimo o atrito do trabalho com Docker.

Num futuro próximo queremos configurar nosso ambiente de desenvolvimento como um cluster Docker, de forma a tornar mais transparente a questão da gerência de configuração dos nossos servidores.

Mais adiante, é bem provável que todo o pipeline de desenvolvimento para alguns projetos seja rodado 100% em Docker, do desenvolvimento à produção, uma vez que serviços de cloud como Amazon AWS e Azure, entre outros, já oferecem essa opção de ambiente.

Estamos trabalhando nisso, se quiser saber mais, fique ligado nos próximos capítulos 😉

Se tiver interesse em saber um pouco mais sobre Docker, confira esta apresentação introdutória que fizemos no SoftDrops.


Quer saber mais sobre DevOps? Acesse o material que preparamos para você!

Acessar conteúdo

Uilian Souza
Uilian Souza

Uilian Souza é formado em Ciência da Computação, com pós-graduação em Arquitetura de Sistemas e BI. Com experiência em múltiplas linguagens e plataformas, já participou de diversos projetos de software nas mais diversas áreas, atuando como arquiteto, desenvolvedor, analista e líder técnico. Às vezes tudo de uma vez só, fazendo pausas para o café ;)

Deixe uma resposta