18.06.2015

A Baleia e O Vagabundo (Docker e Vagrant)

A Baleia e O Vagabundo (Docker e Vagrant) Imagem via canva.com

Já falamos aqui no blog sobre o Vagrant e também sobre o Docker, ambos com o mesmo propósito: "Conteinerização".

E o que significa Conteinerização? Quer dizer, basicamente, colocar sua aplicação em uma caixa para então poder transporta-la e instala-la. E, então, qualquer tipo de atualização de biblioteca, API ou até mesmo sistema operacional que fica restrito ao seu contêiner.

Então significa posso rodar o conteiner sem precisar atualizar o Sistema Operacional, as Bibliotecas e outras dependencias da minha máquina????

title= Imagem via allejo.com.br

Qual a diferença dos dois?

Basicamente, o Vagrant roda máquina virtual e o Docker roda um LXC.

Enquanto o Vagrant roda uma máquina virtual, o Docker simplesmente utiliza as bibliotecas e binários contidos no contêiner. O que siginifica dizer que, no caso do Vagrant, toda uma máquina nova está sendo rodada dentro da sua máquina, sendo assim, temos mais memória e mais processamento, além da aplicação.

Containers vs. VMs : Containers are isolated, but share OS and, where appropriate, bins/libraries .. result is significantly faster deployment, much less overhead, easier migration, faster restart Imagem via serversforhackers.com

Dessa forma, o próprio pacote gerado pelo Docker é menor do que o pacote gerado pelo Vagrant (estamos falando de diferença entre megabytes e gigabytes), já que o Docker não contém um sistema operacional inteiro dentro dele.

Qual dos dois é melhor?

Em Minha Humilde Opnião Imagem via canva.com

Em minha humilde opinião o Docker ganha do Vagrant em alguns critérios, porém ambos não são exclusivos (já que o Vagrant suporta o provisionamento utilizando o Dockerfile do Docker e também, como podemos rodar uma máquina Linux, é possivel rodar Docker dentro dela).

Além do fato de que o Docker não precisa rodar uma máquina virtual nova, significando menos processamento e memória, também temos o Docker Hub que é um repositório de imagens do Docker, imagens essas, feitas por milhares de pessoas e empresas. Assim, é possivel baixar, rodar o container e testar a aplicação e, depois, simplesmente excluir o container. Dessa forma sua máquina não precisou instalar uma biblioteca nova, banco de dados ou seja lá o que for.

Outro ponto positivo para o Docker é que ele possui um "versionamento" do conteiner, o que quer dizer que, se por algum motivo você fizer besteira ou o conteiner não se comportar bem depois de uma configuração podemos voltar para o estado original de quando baixamos do Docker Hub. Isso tudo sem falar do cache de construção que o Docker possui, diminuindo banda e processamento.

Por fim, no Docker, você pode rodar até aplicativos que tenham janela:

Creating a new Java Application in Netbeans Imagem via fabiorehm.com

Porem…

O Docker roda, nativamente, somente Linux (está para sair uma versão para Windows). Então, com Vagrant temos oportunidade de utilizar outros sistemas operacionais.

Para rodar o Docker em outros sistemas operacionais (Windows, Mac OSX e etc) precisamos de rodar uma máquina virtual Linux (boot2docker ou docker-machine), sem falar no docker-swarm que permite criar um cluster de Dockers.

O lado bom é que a Microsoft planeja lançar o próximo Windows Server com suporte para Docker.

E, para quem tem Cloud (Amazon, RackSpace, DigitalOceal e etc), tanto o Docker-machine quanto o Vagrant permitem a criação de máquinas automáticas nestes serviços, sem falar na instalação das aplicações.

É isso ai, o próximo artigo será um exemplo de como utilizar o Docker com Maven para fazer integração continua.

Henrique Moreno

Desenvolvedor da Sm4rt Change e Geek de plantão. Paixão por inovação.

< voltar a página de artigos