Com a popularização da computação em nuvem houve um aumento considerável na quantidade de máquinas virtuais que os administradores têm de manter. A criação e manutenção de uma máquina virtual (em virtualizadores como o Virtual Box, VMWare, etc) demanda grande quantidade de tempo e, por vezes, é complexa. Além do fato dessas máquinas virutais consumirem uma quantidade imensa de espaço em disco.
Devido a este crescimento e grande dificuldade ao operar surgiu a necessidade de melhorar esse modelo. Eis que um gênio observou que, era recreado toda configuração da máquina, incluindo HD, processadores virtuais e interfaces de rede, e ainda instalando o SO inteiro, quando na verdade o necessário seria somente utilizar um SO diferente como plataforma e alguns aplicativos diferentes. Sendo assim as novidades convergiram entre duas frentes distintas onde duas diferentes soluções se destacaram e serão melhor explicadas neste.
É uma plataforma aberta para desenvolvedores e administradores de sistemas para construir, entregar e rodar aplicações distribuidas. É composto pelo Docker Engine, que é uma leve ferramenta de execução e empacotamento, e pelo Docker Hub, um serviço em nuvem responsável pelo compartilhamento de aplicações e automação de fluxos de trabalho. Ele permite que aplicações sejam rapidamente montadas e elimina o atrito e a diferença entre os ambientes de desenvolvimento, testes e produção, ou seja, sem essa de “na minha máquina funciona”.
Porém Docker não é uma ferramenta de virtualização de máquinas, ele é um ambiente de virtualização de Linux, construído sobre os LinuX Containers (LxC), que utiliza a funcionalidade cgroups para criar e rodar ambientes Linux virtuais isolados em um único host.
Este VE (Virtual Environment - ambiente virtual) roda diretamente sobre o kernel já existente (do host) e apenas cria um container (recipiente) onde irão ser executados seus aplicativos, onde até é possível recriar o SO, já que este será apenas outro aplicativo rodando sobre o kernel.
Já estão, desde a versão 0.9, trabalhando para que o Docker não seja restrito apenas ao LxC, mas também compatível com KVM, Hyper-V, Xen, etc.
Uma desvantagem que vale se observar a respeito do docker é de que, pelo fato de compartilhar o kernel, seus containers não terão completo isolamento.
Lançado em 2010, pode ser rapidamente resumido como um gerenciador de máquinas virtuais. Ele permite que você crie um script e empacote as configurações da máquina virtual. Sua proposta, assim como a do Docker, é acabar com a desculpa de que “na minha máquina funciona”.
Entretanto o Vagrant continua sendo uma máquina virtual, ainda que com muito mais recursos que as ferramentas comuns de virtualização. Por exemplo, talvez um dos recursos mais interessantes seja a possibilidade de integrá-lo com ferramentas de gestão de configuração (CM - Configuration Management), como Chef ou Puppet, para pré-configurar suas máquinas virtuais.
O que o Docker faz é permitir-lhe, por usar AuFS como sistema de arquivos, reutilizar “imagens” entre vários de seus containers, em outras palavras, enquanto com uma imagem de 1GB do seu SO gastaria 5GB para subir 5 VMs normais, com Docker você continuaria usando 1GB, talvez um pouco mais, devido ao fato das camadas poderem ser compartilhadas entre seus containers.
Containers fácilmente portáveis: você pode criar uma imagem de toda a configuração e aplicativos instalados em seu container, transferir e istalar em outro host com Docker previamente instalado.
Basicamente nas mesmas situações do Docker, exceto pelo fato do versionamento e colaboração, portanto:
Ainda que pareçam competir entre si alguns adminsitradores conseguiram unir as duas tencnologais a modo de complementarem-se.
Se você necessita de um isolamento entre as aplicações e necessida criar diversos ambientes diferentes, então Docker é o caminho! Já se você necessita de isolamento total vá de Vagrant!