Vagrant é legal, mas pesado. Posso usar o docker? Resposta: Sim, com fig
O Vagrant é legal porque permite fácil configuração de VMs de desenvolvimento para trabalhar. Mas as VMs tendem a ser bastante pesadas e rodar 20 serviços dentro de 20 VMs em seu Macbook com certeza o manterá aquecido no inverno, mas pode não ajudar em sua produtividade.
É exatamente aqui que entra o fig : ele permite que você configure um conjunto de contêineres docker e seus links entre si e, em seguida, execute cada serviço dentro de um contêiner docker.
Esta é uma abordagem muito leve e é perfeitamente possível executar 20 contêineres em sua máquina.
Docker e OSX: Boot2Docker e seus problemas
Agora o Docker é legal e tudo – mas sei que a maioria de vocês está trabalhando no OSX. Freqüentemente estou fazendo isso também. Mas o Docker é uma ferramenta de contêiner Linux . Sem OSX. Filhote de cachorro triste … mas não tenha medo!
Boot2Docker é uma maneira legal (e agora recomendada) de colocar o Docker no OSX: ele inicia uma única VM pequena para executar o Docker e os contêineres dentro dele. Yay!
Mas há insetos e bloqueios de estradas …
A questão da fig, volumes compartilhados e Boot2Docker
Infelizmente, a maneira como fig funciona ( consulte o guia de primeiros passos, por exemplo ) é compartilhando o diretório que contém seu código com o contêiner do docker (montando-o como um volume). Isso funciona perfeitamente bem quando você está em uma máquina Linux e o Docker é executado diretamente nela. Mas aqui, o docker só pode ser montado a partir do sistema de arquivos de sua VM Boot2Docker …. que não é onde seu código-fonte reside.
Então aqui está o primeiro obstáculo a pular – depois de instalar o boot2docker, você deve obter uma imagem personalizada para o boot2docker que contém as adições de convidado do Virtualbox como este:
$ cd ~/.boot2docker
$ curl http://static.dockerfiles.io/boot2docker-v1.0.0-virtualbox-guest-additions-v4.3.12.iso > .boot2docker.iso
$ boot2docker init
$ VBoxManage sharedfolder add boot2docker-vm -name home -hostpath /Users
$ boot2docker up
(Encontrei essa solução depois de pesquisar no Google em https://github.com/orchardup/fig/issues/26 )
Assim que a máquina estiver ligada, precisamos montar a pasta compartilhada dentro da VM:
$ boot2docker ssh "sudo modprobe vboxsf && mkdir -v -p /Users && sudo mount -v -t vboxsf -o uid=0,gid=0 home /Users"
Essa é uma pequena variação do tópico de problemas que vinculei acima: estamos definindo explicitamente o uid e o gid, para que se torne acessível.
Legal.
A última armadilha: encaminhamento de porta
Tenha cuidado com os encaminhamentos de portas … o servidor que você iniciou está em outro castelo, Mario!
Como “localhost” se refere à VM boot2docker, você deve usar o IP privado da VM boot2docker e obtê-lo de:
$ boot2docker ip
Feliz desenvolvimento!