Intro
Ich kann keinen guten Weg finden, um eine Entwicklungsumgebung unter OS X mit Docker und Boot2Docker einzurichten. Das Problem, auf das ich stoße, ist, wie der Quellcode so verwaltet wird, dass:
- Ich kann den Code unter OS X mit den bereits installierten Tools (Texteditor, IDE, Git usw.) ändern.
- Diese Änderungen werden im Docker-Container angezeigt. Wenn ich also Tests erneut ausführe oder eine Webseite aktualisiere, kann ich meine Änderungen sofort sehen.
Theoretisch sollte dies einfach sein, indem Sie meinen Quellcode als Volume bereitstellen:
docker run -it -v /path/to/my/source/code:/src some-docker-image
Leider hat dies zwei Hauptprobleme, die es unter OS X völlig unbrauchbar machen:
Problem Nr. 1: Bereitgestellte Volumes auf VirtualBox (die vboxsf verwenden) sind extrem langsam
Hier ist zum Beispiel, wie lange Jekyll braucht, um meine Homepage zu kompilieren, wenn der Quellcode Teil des Docker-Images ist:
> 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
Hier ist genau das gleiche Docker-Image, außer dass ich diesmal den Quellcode von OS X einbinde:
> 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
Problem Nr. 2: Die Dateiüberwachung ist fehlerhaft
Die Standardüberwachungsmechanismen in SBT, Jekyll und Grunt verwenden Technologien wie inotify, die nicht funktionieren, wenn sie in einem Docker-Container ausgeführt werden und die Änderungen in OS X an einem bereitgestellten Ordner vorgenommen werden.
Problemumgehungen Ich habe es versucht
Ich habe nach Lösungen gesucht (einschließlich aller auf SO) und einige davon ausprobiert, aber keine erfolgreiche gefunden:
- Ich habe Boot2Docker auf NFS umgestellt , aber es war genauso langsam.
- Ich habe Vagrant + NFS ausprobiert , und das war auch genauso langsam.
- Ich habe versucht, ein Samba-Mount zu verwenden , aber der Ordner wurde im Docker-Container immer leer angezeigt.
- Ich habe versucht, das Unison-Dateisystem zu verwenden , das kurz zum Synchronisieren von Dateien diente, dann aber weiterhin Verbindungsfehler zeigte .
- Ich habe die Abfrage in Jekyll aktiviert , aber das hat die Verzögerung erheblich erhöht, bis meine Änderungen übernommen wurden.
- Ich habe Dinghy ausprobiert , einen "schnelleren, freundlicheren Docker unter OS X mit Vagrant" und einige Verbesserungen erzielt. Anstatt dass die Jekyll-Kompilierung 10-15x langsamer war, war sie 2-3x langsamer. Das ist besser, aber immer noch nicht ganz brauchbar.
Hat jemand eine Lösung gefunden, die tatsächlich funktioniert und es Ihnen ermöglicht, Code mit Docker und OS X produktiv zu entwickeln?
Update: endlich eine Lösung!
Ich habe endlich eine Lösung gefunden, die mit Boot2Docker + rsync produktiv erscheint. Ich habe die Details zum Einrichten in meiner eigenen Antwort sowie in einem Open-Source-Projekt namens docker-osx-dev festgehalten .