Intro
Je ne peux pas trouver un bon moyen de configurer un environnement de développement sur OS X à l'aide de Docker et Boot2Docker. Le problème que je rencontre est de savoir comment gérer le code source pour que:
- Je peux modifier le code sous OS X en utilisant les outils (éditeur de texte, IDE, git, etc.) que j'ai déjà installés.
- Ces modifications sont reflétées dans le conteneur Docker, donc si je réexécute des tests ou actualise une page Web, je peux voir mes modifications immédiatement.
En théorie, cela devrait être facile à faire en montant mon code source sous forme de volume:
docker run -it -v /path/to/my/source/code:/src some-docker-image
Malheureusement, cela présente deux problèmes majeurs qui le rendent complètement inutilisable sous OS X:
Problème n ° 1: les volumes montés sur VirtualBox (qui utilisent vboxsf) sont extrêmement lents
Par exemple, voici combien de temps il faut à Jekyll pour compiler ma page d'accueil si le code source fait partie de l'image 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
Voici exactement la même image Docker, sauf que cette fois, je monte le code source depuis 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
Problème n ° 2: la surveillance des fichiers est interrompue
Les mécanismes de surveillance par défaut dans SBT, Jekyll et grunt utilisent des technologies telles que inotify, qui ne fonctionnent pas s'ils s'exécutent dans un conteneur Docker et que les modifications sont apportées dans OS X à un dossier monté.
Solutions de contournement que j'ai essayées
J'ai cherché des solutions (y compris toutes celles sur SO) et en ai essayé quelques-unes, mais je n'ai pas trouvé de solution réussie:
- J'ai changé Boot2Docker pour utiliser NFS , mais c'était tout aussi lent.
- J'ai essayé Vagrant + NFS , et c'était tout aussi lent.
- J'ai essayé un montage Samba , mais le dossier était toujours vide dans le conteneur Docker.
- J'ai essayé d'utiliser le système de fichiers Unison , qui a fonctionné brièvement pour synchroniser les fichiers, mais a continué à montrer des erreurs de connexion .
- J'ai activé l' interrogation dans Jekyll , mais cela a considérablement augmenté le délai jusqu'à ce que mes modifications soient prises en compte.
- J'ai essayé Dinghy , un "Docker plus rapide et plus convivial sur OS X avec Vagrant" et j'ai obtenu quelques améliorations. Au lieu que la compilation Jekyll soit 10 à 15 fois plus lente, elle était 2 à 3 fois plus lente. C'est mieux, mais pas encore tout à fait utilisable.
Quelqu'un a-t-il trouvé une solution qui fonctionne réellement et vous permet de développer du code de manière productive avec Docker et OS X?
Mise à jour: enfin une solution!
J'ai enfin trouvé une solution qui semble productive en utilisant Boot2Docker + rsync. J'ai capturé les détails sur la façon de configurer cela dans ma propre réponse ainsi que dans un projet open source appelé docker-osx-dev .