Algum tempo atrás fui apresentado ao Vagrant, e é difícil imaginar a vida sem ele agora; virtualizar e replicar ambientes (especialmente de desenvolvimento) tornou-se trivial, o que acabou fazendo do Vagrantfile um dos grandes heróis contemporâneos.
Mas virtualização ainda custa caro (hardware), e muitas máquinas em pé não costuma ser uma boa ideia.
Existem alguns outros poucos pontos negativos, como uma VM por aplicação ou até mesmo a necessidade de subir o sistema operacional inteiro para fazer qualquer coisa, mas são apenas pormenores; o Vagrant seguirá sendo fundamental e brilhante por bastante tempo ainda (acho).
Mais ou menos; existe uma pequena diferença entre virtualizar e conteinerizar (se é que essa palavra existe) e é justamente ela que faz essa combinação Vagrant + Docker perfeita. Ao menos para o meu dia-a-dia.
O Docker é um aplicativo que possibilita criarmos containers (com ajuda do LXC) para um sistema operacional inteiro.
An open platform for distributed applications for developers and sysadmins.
Um container é essencialmente o SO, e suas particularidades de forma isolada; enquanto no host é apenas mais um processo.
Naturalmente um container consome poucos recursos, o tempo de inicialização é curtíssimo e é possível assim como no Vagrant, replicar o container de forma simples através das imagens ou do Dockerfile (um novo herói sem sombra de dúvidas).
Usar o Docker para desenvolvimento é espetacular [1], mas essa facilidade em provisionar containers mostrou-se um grande aliado quando falamos em colocar aplicativos em produção, como o slogan do Docker deixa claro.
Build, Ship, and Run Any App, Anywhere
Após contabilizarmos os prós, contras e os mais ou menos do Docker, pudemos falar um pouco mais sobre o assunto na ISPM, olharmos de perto como o Docker pode nos ajudar.
[1] OK, tem alguns problemas também.