Intro
No puedo encontrar una buena manera de configurar un entorno de desarrollo en OS X usando Docker y Boot2Docker. El problema al que me enfrento es cómo administrar el código fuente para que:
- Puedo modificar el código en OS X usando las herramientas (editor de texto, IDE, git, etc.) que ya tengo instaladas.
- Esas modificaciones se reflejan en el contenedor de Docker, por lo que si vuelvo a ejecutar las pruebas o actualizo una página web, puedo ver mis cambios de inmediato.
En teoría, esto debería ser fácil de hacer montando mi código fuente como un volumen:
docker run -it -v /path/to/my/source/code:/src some-docker-image
Desafortunadamente, esto tiene dos problemas importantes que lo hacen completamente inutilizable en OS X:
Problema n. ° 1: los volúmenes montados en VirtualBox (que usan vboxsf) son extremadamente lentos
Por ejemplo, este es el tiempo que tarda Jekyll en compilar mi página de inicio si el código fuente es parte de la imagen de 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
Aquí está exactamente la misma imagen de Docker, excepto que esta vez, monto el código fuente de 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: la visualización de archivos no funciona
Los mecanismos de vigilancia predeterminados en SBT, Jekyll y grunt utilizan tecnologías como inotify, que no funcionan si se ejecutan en un contenedor Docker y los cambios se realizan en OS X en una carpeta montada.
Soluciones provisionales que probé
Busqué soluciones (incluidas todas las de SO) y probé algunas de ellas, pero no encontré ninguna exitosa:
- Me cambié Boot2Docker utilizar NFS , pero era tan lento.
- Probé Vagrant + NFS , y eso también fue igual de lento.
- Probé un montaje Samba , pero la carpeta siempre aparecía vacía en el contenedor de Docker.
- Intenté usar el sistema de archivos Unison , que funcionó brevemente para sincronizar archivos, pero luego seguía mostrando errores de conexión .
- Activé el sondeo en Jekyll , pero eso aumentó significativamente el retraso hasta que se recogieron mis cambios.
- Probé embarcación auxiliar , un "más rápido, más amable del estibador en OS X con el vagabundo" y tengo alguna mejora. En lugar de que la compilación de Jekyll fuera 10-15 veces más lenta, fue 2-3 veces más lenta. Eso es mejor, pero aún no se puede usar del todo.
¿Alguien ha encontrado una solución que realmente funcione y le permita desarrollar código de manera productiva con Docker y OS X?
Actualización: ¡por fin una solución!
Finalmente encontré una solución que parece productiva usando Boot2Docker + rsync. Capturé los detalles sobre cómo configurar esto en mi propia respuesta , así como en un proyecto de código abierto llamado docker-osx-dev .