Ambiente de desenvolvimento leve com fig & boot2docker no OSX

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!