Introdução
Não consigo descobrir uma boa maneira de configurar um ambiente de desenvolvimento no OS X usando Docker e Boot2Docker. O problema que estou enfrentando é como gerenciar o código-fonte para que:
- Posso modificar o código no OS X usando as ferramentas (editor de texto, IDE, git, etc) que já instalei.
- Essas modificações são refletidas no contêiner do Docker, portanto, se eu executar novamente os testes ou atualizar uma página da Web, posso ver minhas alterações imediatamente.
Em teoria, isso deve ser fácil de fazer montando meu código-fonte como um volume:
docker run -it -v /path/to/my/source/code:/src some-docker-image
Infelizmente, isso tem dois problemas principais que o tornam completamente inutilizável no OS X:
Problema nº 1: os volumes montados no VirtualBox (que usam vboxsf) são extremamente lentos
Por exemplo, veja quanto tempo Jekyll leva para compilar minha página inicial se o código-fonte fizer parte da imagem Docker:
> docker run -it brikis98/yevgeniy-brikman-homepage:v1 bash
root@7aaea30d98a1:/src# time bundle exec jekyll build
[...]
real 0m7.879s
user 0m7.360s
sys 0m0.600s
Aqui está exatamente a mesma imagem do Docker, só que desta vez, eu monto o código-fonte do OS X:
> docker run -it -v $(pwd):/src brikis98/yevgeniy-brikman-homepage:v1 bash
root@1521b0b4ce6a:/src# time bundle exec jekyll build
[...]
real 1m14.701s
user 0m9.450s
sys 0m3.410s
Problema nº 2: a observação de arquivos está corrompida
Os mecanismos de observação padrão no SBT, Jekyll e grunt usam tecnologias como inotify, que não funcionam se estiverem sendo executados em um contêiner do Docker e as alterações forem feitas no OS X para uma pasta montada.
Soluções alternativas que tentei
Procurei soluções (incluindo todas no SO) e tentei algumas delas, mas não encontrei nenhuma bem-sucedida:
- I comutada Boot2Docker usar NFS , mas era tão lento.
- Tentei o Vagrant + NFS , e também era lento.
- Tentei uma montagem Samba , mas a pasta sempre apareceu vazia no contêiner do Docker.
- Tentei usar o sistema de arquivos Unison , que funcionou brevemente para sincronizar arquivos, mas continuou mostrando erros de conexão .
- Habilitei a votação no Jekyll , mas isso aumentou significativamente o atraso até que minhas alterações fossem selecionadas.
- Experimentei o Dinghy , um "Docker mais rápido e amigável no OS X com Vagrant" e consegui algumas melhorias. Em vez da compilação do Jekyll ser 10-15x mais lenta, foi 2-3x mais lenta. Está melhor, mas ainda não é totalmente utilizável.
Alguém encontrou uma solução que realmente funcione e permita desenvolver código produtivamente com Docker e OS X?
Atualização: enfim uma solução!
Finalmente encontrei uma solução que parece produtiva usando Boot2Docker + rsync. Capturei os detalhes sobre como configurar isso em minha própria resposta , bem como em um projeto de código aberto chamado docker-osx-dev .