O Docker engloba tecnologias já existentes, como por exemplo copy-on-write union filesystems e Linux Containers, surgiu em sistemas GNU-Linux.

A origem do Docker se deu na dotCloud, uma empresa de hospedagem. Para executar códigos de clientes, esta empresa utilizada containers internamente, entretanto, com o passar do tempo, construíram ferramentas com a capacidade de gerenciar diversos containers.

Foi no ano de 2013 em que a dotCloud notou que as suas ferramentas poderiam também ser úteis para as demais pessoas. E com isso foi lançado o Docker, como opensource.

Dali em diante, o Docker passou a desenvolver-se e crescer de maneira exponencial, tomando assim vida própria, e com parcerias grandes entre empresas renomadas como IBM, Google, Rackspece e RedHat.

Conceito de Docker

O conceito de Docker deve ser entendido em partições. Enquanto que o container trata-se de um ambiente isolado, o Docker diz respeito à uma plataforma na linguagem de programação Go, open source, esta que é desenvolvida diretamente no Google e apresenta um alto desempenho.

Visto isso, o Docker agrupa todas as partes de softwares num sistema de arquivo completo, além de abrangir todos os recursos básicos para sua execução, e é por este motivo que ele significa uma plataforma de containers.

Mas o que isso tudo quer dizer? Que pode ser instalado tudo no servidor e armazenado nos container, de forma que os mesmos softwares e suas versões são capazes de ter uma execução facilitada em qualquer que seja o ambiente de desenvolvimento.

Na prática, o Docker age destacando recursos além de usar bibliotecas de kernel em comum. No container, são dispostos itens empacotados, ou até mesmo num ambiente interno, tornando-se portáteis, resultando num trabalho mais eficiente.Vale lembrar que a implantação também pode ser feita em ambientes não heterogêneos, ao mesmo tempo.

Computação em nuvem

Devido a computação em nuvem, o Docker trata-se de uma implementação de virtualização de containers que tem a cada vez mais, conquistando ainda mais espaço, o hypervisor era quem dominava o ambiente anteriormente, entretanto agora este é excluído do processo.

O fato do container oferecer inúmeras facilidades, ele tem sido uma das principais tendências da tecnologia da informação, pois ele faz com que a aplicação da metodologia DevOps se torne facilitada, assim como promove o ágio desenvolvimento, não é a toa que o Google usa essa tecnologia há mais de dez anos.

Pelo fato de o Docker ser open source, ele favorece a execução de deploys, além do escalonamento de aplicações com uma maior facilidade. Por conta da virtualização por container, ele também possibilita um ambiente leve e isolado para rodar o programa.

Por se tratar de um assunto em alta ultimamente, tem se desenvolvido uma infinidade de artigos a respeito do Docker, abordando principalmente a forma de uso, integração, ferramentas auxiliares e afins, entretanto são muitas as pessoas que ainda questionam a respeito de quais as características reais do Docker, além do porquê de sua utilização, e são essas questões que iremos abordar no artigo de hoje.

Quais as características do Docker

As principais características do Docker são:

  • Ser centrado no desenvolvedor (pouco amigável para o usuário, é uma ferramenta de linha de comando);
  • Portabilidade para deployment (muito útil para continuous delivery);
  • Versionável;
  • Reutilizável;
  • Developer oriented workflow e
  • Possui uma semelhante à do GIT.

Como funciona o Docker?

Aplicações como CRMs e ERPs eram muito utilizadas por médias e grandes empresa. Isso significa que conjuntos de softwares que iniciavam com projetos simplificados, tornavam-se ineficientes com o passar do tempo.Impedindo assim o progresso, por contarem com um código-fonte monolítico.

Para resolver a este problema foi que surgiu o container, passando por várias etapas para a solução. Inicialmente é necessário a desagregação do aplicativo em componentes menores, que são chamados de microsserviços.

Em seguida, os desenvolvedores adquirem a capacidade de adotar uma arquitetura que eleva a eficiência operacional. Isso se deve pelo fato do código-fonte ser destinada à cada componente de aplicação. De forma que o software passa por diversos estágios, como por exemplo, para um ambiente de testes, outro virtual e em seguida de produção.

A aplicação, em cada um desses locais, precisa ter uma performance consistente, isso é uma garantia do container. Por encapsular componentes num leve e único pacote, ele permite a execução dos aplicativos com consistência, seja num ambiente físico ou virtual.

Docker e API

Logo, o Docker, por meio de um API, faz a comunicação entre o servidor e cliente. É preciso ter o serviço instalado num local e apontar o cliente para este servidor para realizar esse workflow.

A plataforma utiliza alguns conjuntos de recursos para administrar e criar os containers, até mesmo para limitar os recursos. A biblioteca libcontainer está entre eles, ela promove a comunicação entre o backend e o Docker Daemon. Vale ainda ressaltar que o Docker tem como base o conceito de layers.

Mas como o container é construído? Através de cgroups, namespaces, chroot, dentre outras funcionalidades do kernel, com objetivo de isolar a área para sua futura aplicação. Desta forma, o kernel, no Docker, monta os rootfs na modalidade apenas leitura, e logo a diante, cria-se um arquivo do sistema, como read-write sobre o rootf. E então, o kernel sobrepõe sucede a partição raíz como read-only e capta um file system novo, para inseri-lo sobre o rootfs.

Note que o container está pronto para a execução da imagem seguido o carregamento do rootfs. É também uma camada read-write, que surge a partir de uma imagem apenas leitura. É pode este motivo que ele é um excelente ferramenta para DevOps.

Para os administradores de sistemas existe a vantagem de menos áreas ocupadas, custos menores, e flexibilidade. Aos desenvolvedores, para que os profissionais centralizem a atividade principal é mais liberdade.

Por que o Docker tem se tornado uma tendência no mercado?

É devido as diferentes facilidades proporcionadas pela plataforma que o Docker tem se popularizado no mercado. Comparado com a VM, a estrutura é reduzida, pois o hypervisor é trocado pelo Docker engine enquanto que o hospedeiro é excluído.

Os dois modelos autorizam o isolamento de recursos, incluindo as aplicações, arquivos necessários e bibliotecas. Porém, o VM difere-se pois decisa do SO e desta forma exige espaço, além de necessitar de um custo de manutenção.

Estas especificações mostra que o Docker presenta uma estrutura mais leve e portátil, sendo assim fica mais fácil de mantê-la, pois os containers compartilham do mesmo SO da hospedagem. Somente os processos que são isoladamente executados, e por este motivo, o custo e também a necessidade de espaço passam a ser mais reduzidos.

Outro ponto positivo do Docker é a portabilidade, e isso fornece ainda mais benefícios aos ambientes de development. Desta maneira, uma aplicação passa a ser executada no ambiente de homologação e produção com maior facilidade.

Garantias

Há ainda um maior garantia de que não haverá imprevistos ou erros durante o deploy. Gastando-se menos tempo para a configuração dos ambientes e reduzindo o tempo com analise e identificação  das diferenças existentes. Isso tudo resulta na integração das equipes de SysAdmin e desenvolvimento, que influenciam no aumento da produtividade.

Imagine só uma empresa que realiza um projeto qualquer em WordPress com PHP, versão 5*, entretanto deseja atualizar sua linguagem para a 7ª. Este processo de update da versão, tona-se simplificado com o Docker. É possível ainda que você realize testes para definir a versão que irá permanecer sendo utilizada e ainda assinalar todos os ajustes que forem necessários.

Por todas essas peculiaridades é que diversas empresas, grandes inclusive, tem utilizado o Docker em todo o mundo.

Podemos citar algumas, como por exemplo:

  • The Washington Post;
  • Uber;
  • Paypal;
  • eBay;
  • General Eletric;
  • Spotify, dentre outras.

De início, ele pode representar uma grande demanda de recursos, entretanto a recompensa acaba sendo os benefícios em agilidade. Visto que a velocidade de implantação de containers varia de milissegundos a alguns segundos. Além disso diversas opções de hospedagem adotaram essa tecnologia.

Segue abaixo alguns bons motivos para se utilizar Docker

  1. Ambientes semelhantes

Após sua aplicação ser transformada numa imagem Docker, ela tem a oportunidade de ser instanciada como container, isso em qualquer ambiente que desejar. Isso quer dizer que você pode utilizar sua aplicação no notebook do desenvolvedor da mesma maneira em que ela seria executada no servidor de produção.

Durante o inicio do container, a imagem Docker aceita parâmetros, o que indica que é possível que uma mesma imagem se comporte de maneiras distintas entre os diferentes ambientes. Ou seja, o container pode conectar-se em seu banco de dados local para testes, utilizando as credenciais e também e também a base de dados de teste. Entretanto, quanto o container,  criado segundo a mesma imagem, receber os parâmetros do ambiente de produção.  Ele irá acessar a base de dados numa infraestrutura um pouco mais robusta, com base de dados de produção e credenciais.

Ambientes semelhantes interferem de maneira positiva na analise de erros e também na confiabilidade do processo de entrega contínua, já que estes baseiam-se na criação de um artefato único que migra entre os ambientes. Quando se fala sobre o Docker, o artefato seria a imagem com todas as dependências necessárias para execução de seu código, seja ele dinâmico ou próprio.

  1. Aplicação como pacote completo

Com o uso das imagens Docker é possível empacotar sua aplicação toda, além de suas dependências. Dessa forma sua distribuição fica mais simples, uma vez que não é preciso enviar uma documentação extensa. Nem dizer como fazer a configuração da infraestrutura necessária para permitir a sua execução.

É preciso apenas disponibilizar a imagem num  repositório e em seguida fazer a liberação do acesso ao usuário da mesma. Feito isso vai baixar o pacote que será executado sem problema algum.

O que também é afetada positivamente é a atualização, pelo fato de a estrutura de camadas do Docker, viabilizar que em caso de mudança. Somente a parte modificada será transferida, e desta maneira o ambiente tem a possibilidade de ser alterado de maneira mais prática.

O usuário precisará apenas executar um comando para a atualização da imagem da aplicação. Ele vai ser refletido no container em execução somente no momento que fosse desejado. Utilizar tags em imagens Dockers é muito funcional, pois essa medida possibilita o armazenamento de várias versões da mesma aplicação. Assim caso haja um problema na atualização, utilizar uma imagem com a tag anterior seria um plano de retorno.

  1. Comunidade

Atualmente é possível acessar o gitlab ou github a procura de exemplos de códigos, com a utilização do repositório de imagens do Docker. Conseguir modelos bons de infraestrutura de aplicações e serviços para integrações complexas prontos, tornou-se algo possível.

Como exemplo, podemos citar o nginx como proxy reverso e como banco de dados o mysql.Se sua aplicação necessitar de ambos recursos. Não será preciso perder tempo com instalação e configuração desses serviços, basta apenas usar as imagens do repositório. Configurando apenas os parâmetros mínimos para adequar seu ambiente

  1. Replicação e padronização

É através de arquivos de definição que as imagens Docker são construídas. Desta forma garantir um padrão determinado a ser seguido é algo possível de se fazer. Assim é possível elevar a confiança na sua replicação, bastando as imagens seguirem as melhores práticas de construção. Assim será possível escalar a estrutura de forma rápida.

Se a equipe receber um novo integrante para trabalhar no desenvolvimento, essa pessoa poderá receber em alguns comandos o ambiente de trabalho. Isso tudo irá durar o tempo do download das imagens que serão utilizadas. Desta forma, no início de um novo integrante no processo de desenvolvimento da aplicação, ela irá ter a oportunidade de reproduzir o ambiente em sua estação de maneira rápida. Poderá desenvolver ainda os códigos mediante o padrão da equipe.

Assim caso seja necessário testar uma versão nova de determinada parte da sua solução com a utilização de imagens Docker. Basta a mudança de apenas um ou até mais parâmetros de um arquivo de definição. Ou seja, modificar ou criar sua infraestrutura torna-se um processo mais rápido e ágil.

Gostou do artigo explicando um pouco mais sobre Dockers e seus benefícios? Se ficou ainda alguma dúvida, compartilhe conosco nos comentários para que possamos esclarece-las e até a próxima.