Intro
Nie mogę znaleźć dobrego sposobu na skonfigurowanie środowiska programistycznego na OS X przy użyciu Dockera i Boot2Dockera. Problem, który napotykam, polega na tym, jak zarządzać kodem źródłowym, aby:
- Mogę modyfikować kod na OS X używając narzędzi (edytor tekstu, IDE, git itp.), Które już zainstalowałem.
- Te modyfikacje są odzwierciedlane w kontenerze Docker, więc jeśli ponownie uruchomię testy lub odświeżę stronę internetową, mogę natychmiast zobaczyć swoje zmiany.
W teorii powinno to być łatwe do zrobienia, montując mój kod źródłowy jako wolumin:
docker run -it -v /path/to/my/source/code:/src some-docker-image
Niestety ma to dwa główne problemy, które sprawiają, że jest całkowicie bezużyteczny w systemie OS X:
Problem nr 1: Zamontowane woluminy w VirtualBox (które używają vboxsf) są bardzo wolne
Na przykład, oto ile czasu zajmuje Jekyll skompilowanie mojej strony głównej, jeśli kod źródłowy jest częścią obrazu Dockera:
> 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
Oto dokładnie ten sam obraz Dockera, z wyjątkiem tego, że montuję kod źródłowy z 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
Kwestia # 2: Oglądanie plików jest zepsute
Domyślne mechanizmy nadzoru w SBT, Jekyll i grunt używają technologii, takich jak inotify, które nie działają, jeśli działają w kontenerze Docker, a zmiany są wprowadzane w systemie OS X do zamontowanego folderu.
Rozwiązania, które próbowałem
Szukałem rozwiązań (w tym wszystkich na SO) i wypróbowałem kilka z nich, ale nie znalazłem udanego:
- I przełączane Boot2Docker używać NFS , ale to było tak powolny.
- Wypróbowałem Vagrant + NFS i było to równie powolne.
- Wypróbowałem wierzchowca Samby , ale folder zawsze był pusty w kontenerze Dockera.
- Próbowałem użyć systemu plików Unison , który działał przez chwilę, aby zsynchronizować pliki, ale potem wyświetlał błędy połączenia .
- Włączyłem odpytywanie w Jekyll , ale to znacznie zwiększyło opóźnienie, zanim moje zmiany zostaną odebrane.
- Wypróbowałem Dinghy , „szybszy, bardziej przyjazny Docker na OS X z Vagrantem” i uzyskałem pewną poprawę. Kompilacja Jekyll nie była 10-15x wolniejsza, ale 2-3 razy wolniejsza. Tak jest lepiej, ale nadal nie do końca nadaje się do użytku.
Czy ktoś znalazł rozwiązanie, które faktycznie działa i pozwala produktywnie tworzyć kod za pomocą Dockera i OS X?
Aktualizacja: w końcu rozwiązanie!
W końcu znalazłem rozwiązanie, które wydaje się produktywne przy użyciu Boot2Docker + rsync. Uchwyciłem szczegóły, jak to ustawić, w mojej własnej odpowiedzi, a także w projekcie open source o nazwie docker-osx-dev .