Você já deve ter visto uma destas famosas imagens como a de acima que rolam vez ou outra pela internet e ter se perguntado: \\\”Como os asiáticos conseguem carregar tanta coisa em uma bicicleta?\\\” Certo. Asiáticos fazem quase tudo parecer fácil e quando fazem algo bem, é quase extraordinário.
Mas vamos analisar alguns pontos: a) como montar e desmontar estas caixas em um veículo aparentemente inapropriado, é fácil? b) se a bicicleta cair, ferrou tudo?
Para o problema \\\”maximizar o número de unidades por entrega de um ponto A ao B\\\” o caso da bicicleta asiática é perfeito quando o objetivo é transportar unidades de um ponto A ao B sem necessidade de paradas e ou ajustes, não muito seguro na minha visão, mas na visão, limitações e necessidades deles resolve. Exige uma complexidade de montagem e desmontagem, mas ainda parece eficiente. Sobre o risco de desastres não há dúvidas: se a bicicleta cair, toda a estrutura tem de ser restabelecida para continuar com a entrega prevista.
Essa \\\”arte\\\” (ironia com algo que pode dar muito errado) da bicicleta asiática é como costumo ver ambientes de disponibilidade de serviços (as caixas) baseados em uma estrutura única (as caixas juntas) em um único servidor (a bicicleta).
Quando pensamos no contexto da entrega que a bicicleta realiza como a disponibilidade de uma aplicação web, disponibilizar esta aplicação é algo que sempre irá necessitar, no mínimo, de um servidor web e um banco de dados. Essa receita parece ser simples, mas entre implantar e configurar estes serviços há um tempo precioso que poderia ser aplicado em algo com maior valor para a aplicação ou negócio atende. Aqui podemos imaginar o trabalho que dá montar caixas em uma bicicleta, o tempo e esforço empregado para ter a estrutura de partida.
Ok. Você tem tempo e não tem algo melhor para fazer com ele. Mas não pode esquecer que tudo o que funciona, está sujeito a falha. Como solução para falha você replica um ambiente. Mas e se você não possuir recursos para replicação? Se houver alguma falha no servidor, você terá de realizar todo o trabalho inicial, só que agora terá de empenhar mais esforço para tentar minimizar o tempo de indisponibilidade de sua aplicação.
Sabemos que tempo é dinheiro. A combinação de tempo X dinheiro no cenário acima, geralmente é fonte de estresse que em muitos casos abre espaço para trabalho mal feito e ou implantação das famosas gambiarras, com uma possível carga de retrabalho no futuro. Imagine você sendo o asiático com a entrega que tem um prazo que estourado representa prejuízo, as caixas por uma razão qualquer tombam e se espalham. Pode ter certeza, será grande a possibilidade de você arrumar as caixas de qualquer forma sem pensar em qual a melhor, evitar prejuízos é sua prioridade, assumindo muitas vezes de forma inconsciente o risco de possibilidade de novos imprevistos.
Apesar dos pontos negativos levantados, não havia muitas alternativas. Esta era a realidade e ainda é para muitos. É neste ponto que Docker pode mudar sua realidade.
O que é Docker?
O exemplo da bicicleta asiática usado na introdução é um pouco exagerado, mas o considero apropriado para exemplificar os pontos negativos da estrutura mais comum e tradicional de disponibilização de uma aplicação web.
Imagine que ao invés de transportar caixas em uma bicicleta, você transporta containers em um navio. Com a infraestrutura e tecnologia corretas, você \\\”manuseia\\\” containers no navio e cada container pode conter uma ou mais itens que atenderão uma necessidade. Essa analogia com containers em um navio é Docker. Cada docker-container pode conter um ou mais serviços e pode ser embarcado em um navio.
O Docker foi iniciado como projeto open-source, dentro da dotCloud, Inc., uma empresa de PaaS. Docker fez tanto sucesso que em 2013 a empresa passou a se chamar Docker, Inc. O projeto se encontra disponível no github.com/docker.
Tecnicamente Docker é um Linux Container Engine. Linux Containers(LXC) é uma alternativa aos métodos de virtualização, pois é mais rápido já que utiliza o kernel do servidor host. Docker foi um sucesso porque trouxe uma simplificação ao uso de LXC ao inserir o conceito de imagem, onde cada novo container é uma imagem de um container base. Com Docker você cria seu container base uma vez, realizando todas as instalações e configurações necessárias, e o \\\”manuseia\\\” para servidores, virtual ou hardware dedicado.
É aqui o ponto que o Docker pode mudar a sua realidade. Ao usarmos a abstração do navio que transporta container, se o navio quebrar o motor, o(s) container(s) pode(m) ser movidos para outro navio e seguir viagem. Ou seja, em uma estrutura de disponibilidade de uma aplicação web, se houver uma falha no servidor, bastar ter um novo servidor com o Docker instalado para que o seu container seja recebido. Em pouco tempo a disponibilidade é reestabelecida.
Para um administrador de sistemas, esta ferramenta é essencial para tornar sua vida mais fácil.
Docker e o Desenvolvimento de Sistemas
Docker foi pensado em facilitar a disponibilidade de serviços em ambientes, facilitando a vida de administradores. Porém, pensando como desenvolvedor, sempre estamos precisando de recursos para desenvolvimento e testes. Muitas vezes estes recursos são fornecidos pelas empresas onde trabalhamos, mas nem sempre é sensato tomar algumas liberdades ou você queira fazer testes que não afetem o ambiente geralmente compartilhado. Ou no caso de autônomo onde você deve se preocupar com tudo.
Alguns serviços podem ser de fácil instalação e configuração, mas outros podem ser extremamente complexos e fazer você perder meio dia de trabalho ou mais se não tiver algumas expertises. Para estes serviços complexos Docker é uma ferramenta produtiva para o desenvolvimento.
Por ser um projeto open-source, Docker mantém um repositório de imagens, oficiais ou da comunidade, de serviços conhecidos que podem ser utilizadas conforme necessidade.
Instalando e usando Docker
Docker possui uma documentação excelente. E não há muitos segredos para instala-lo. A seguir faremos o exemplo feito em uma VM Ubuntu 14.04 LTS hospedado em MAC OS 10.10. Observe como podemos fornecer um serviço via container em uma máquina virtual, onde esta, a máquina hospedeira e outras na mesma rede poderão utilizar este serviço com pouco esforço.
Vamos começar por atualizar o gerenciador de pacote do Ubuntu, apt-get:
$ sudo apt-get update
E agora instalamos o Docker:
$ sudo apt-get install docker.io
Pronto! Para testar, vamos rodar um container Ubuntu:
$ sudo docker run -i -t ubuntu /bin/bash
Uma imagem ubuntu será baixada e o bash será executado.
Docker é muito simples. Instalar o banco de dados relacional Oracle no Linux pode ser uma tarefa hercúlea para quem não conhece muito o SO e também como configurá-lo. Não só isso. Instalar e configurar será mais, trabalhoso e demorado que utilizar um docker. Eu utilizo wnameless/oracle-xe-11g.
Existe uma série de dockers interessantes, por exemplo:
Docker é uma ferramenta que veio para ficar. No github vem tomando destaque com vários projetos sendo baseados no Docker. Vem sendo bastante usada em ambientes de computação em nuvem. Se tornou tão essencial que até a gigante do software proprietário, a Microsoft, se rendeu e em Outubro de 2014 anunciou integração com Docker. Sim, você pode usar docker no Windows.
Encorajo-o a utilizar Docker como uma ferramenta primordial para preparação de ambiente. O serviço que necessitar sugiro verificar antes se não há uma imagem disponível, acredito que será uma economia de tempo.
Em um próximo artigo, aprenderemos como construir nossos próprios dockers e conhecer mais sobre esta fantástica ferramenta.
Enjoy Docker!
Deixe um comentário