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!