DevSecOps

12 dez, 2017

Dockerizando seu ambiente de desenvolvimento

Publicidade

Hoje, vou trazer um assunto que venho estudando e aprimorando que é a criação de ambiente Docker para desenvolvimento, onde se tem equipes envolvidas.

Vemos como é difícil o trabalho para configurar ambientes de desenvolvimento mesmo que sejam de fácil configuração, principalmente, quando um novo membro é integrado ao time.

Caso você use um ambiente Git de forma tradicional e possua servidores web configurados e está pensando em implementar um ambiente mais robusto e que promova uma integração de sua equipe, você poderá optar diretamente pelo Docker. Existem outras soluções como o Vagrant, que você pode até experimentar, mas chegará em um ponto que mudará para o Docker.

De onde vem a ideia de container?

O LXC (Linux Container) nasceu em meados de 2008, com o objetivo de ser uma alternativa ao comando chroot. Para quem não conhece, o chroot é um comando do Linux que muda o diretório root do processo corrente e de seus processos filhos.

Podemos dizer que o LXC é uma combinação entre máquina virtual e chroot e possibilita a configuração de um ambiente Linux sem a necessidade de ter um kernel separado.

Com a ajuda do chroot, conseguimos encapsular, ou seja, isolar um sistema inteiro dentro de uma estrutura de diretório. Assim, o sistema só enxerga o que está definido dentro dessa estrutura.

Essa ideia de container é muito prática e diminui a sobrecarga de utilizar várias VMs completas para executar processos e serviços que são, em sua maioria, simples. Com isso poupamos recursos e ganhamos em desempenho.

Como surgiu o Docker nessa jogada?

Como havia dito anteriormente, a ideia de container já existia no Linux a partir da implementação do LXC, porém o acesso a estes containers, bem como a comunicação e configuração para acesso, era bem complexo.

Surfando um pouco nesta onda, em meados de 2013, uma empresa chamada dotCloud, que usava containers internamente para executar códigos de clientes e que, com o tempo, foi construindo várias ferramentas úteis capazes de gerenciar diversos containers percebeu que suas ferramentas poderiam ser utilizadas e ajudar outras pessoas. Então lançaram o projeto como open-source, chamando o de “Docker”. E partir daí veio todo o big bang!

Qual o diferencial do Docker?

O Docker é um sistema de virtualização que gerencia containers e seus recursos de forma isolada e os acessa utilizando bibliotecas de kernel em comum entre host e container.

Conforme o exemplo da imagem abaixo:

Configurar é difícil… Por onde começar?

Não irei entrar em detalhes de instalação do Docker. Caso queiram saber como realizar a instalação e até mesmo conhecer melhor sobre os comandos básicos e avançados, acesse a documentação oficial.

Além disso, o Docker possui um ambiente SAAS com repository conhecido como Docker Hub. Neste repositório, encontramos containers modelos onde é possível fazer um docker pull ou docker run e utilizar conforme sua necessidade.

Temos containers com nginx, mysql, zend, ruby on rails e muitos mais. Tudo a sua disposição e no padrão disponibilizado pela equipe do Docker. Assim, você consegue começar seguindo alguns padrões e também customizar seus containers conforme sua necessidade.

Após configurar o ambiente e quando seu sistema estiver rodando, é interessante que crie um registry ou suba suas configurações de forma que as compartilhe em um repositório comum. Assim sua equipe terá uma configuração customizada de modelo e toda vez que um novo membro necessitar, basta executar um pull que terá toda a arquitetura do projeto para começar a desenvolver. Bem prático!

Os desenvolvedores que estão acostumados com arquitetura de VM completa, em que temos todos os serviços e processos dentro de um único local – por exemplo, tem-se PHP + NGYNX + MYSQL – verão que em um ambiente de containers teremos estes serviços configurados de forma separada e isolada, porém de forma que consigam se comunicar entre si.

Com isso, ao iniciar seu container, você perceberá que o desempenho será bem superior e sua performance e tempo para iniciar serão bem mais ágeis em relação a infraestrutura de VM completa sem utilização de container. Caso use o Vagrant, já verá uma diferença com relação a ambientes com hipervisores analisando o ponto de vista citado acima.

Que tal uma mão na roda?

Dockerhub é uma mão na roda. Conforme mencionei um pouco no tópico anterior, ele é um serviço (SaaS) da Docker para compartilhamento de imagens e também de armazenamento. Nele, encontraremos imagens oficiais e não-oficiais. As oficiais são aos desenvolvidas pela equipe da Docker e as não-oficiais são criadas por outras empresas que colaboram com a Docker.

Caso queira explorar um pouco sobre as imagens disponíveis, acesse: https://hub.docker.com/explore/

O Docker é uma alternativa interessante para quem quer configurar um ambiente de desenvolvimento bem estruturado, com fácil manutenção e atualização e seguindo o compartilhamento de infraestrutura padrão.

Busquem dockerizar seu ambiente de trabalho e venha fazer parte do mundo Docker!