вступление
Я не могу придумать хороший способ настроить среду разработки на OS X с помощью Docker и Boot2Docker. Проблема, с которой я столкнулся, заключается в том, как управлять исходным кодом, чтобы:
- Я могу изменить код в OS X, используя инструменты (текстовый редактор, IDE, git и т.д.), которые я уже установил.
- Эти изменения отражаются в контейнере Docker, поэтому, если я повторно запускаю тесты или обновляю веб-страницу, я сразу вижу свои изменения.
Теоретически это должно быть легко сделать, установив мой исходный код как том:
docker run -it -v /path/to/my/source/code:/src some-docker-image
К сожалению, у этого есть две основные проблемы, которые делают его полностью непригодным для использования в OS X:
Проблема №1: подключенные тома на VirtualBox (которые используют vboxsf) очень медленные.
Например, вот сколько времени занимает Jekyll, чтобы скомпилировать мою домашнюю страницу, если исходный код является частью образа 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
Вот тот же образ Docker, только на этот раз я монтирую исходный код из 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
Проблема №2: просмотр файлов нарушен
Механизмы наблюдения по умолчанию в SBT, Jekyll и grunt используют такие технологии, как inotify, которые не работают, если они работают в контейнере Docker, а изменения в смонтированной папке вносятся в OS X.
Обходные пути, которые я пробовал
Я искал решения (в том числе все на SO) и опробовал несколько из них, но не нашел успешного:
- Я переключил Boot2Docker на использование NFS , но он был таким же медленным.
- Я попробовал Vagrant + NFS , и он тоже был медленным.
- Я пробовал крепление Samba , но в контейнере Docker папка всегда была пустой.
- Я попытался использовать файловую систему Unison , которая некоторое время работала для синхронизации файлов, но затем продолжала показывать ошибки подключения .
- Я включил опрос в Jekyll , но это значительно увеличило задержку до принятия моих изменений.
- Я попробовал Dinghy , «более быстрый и дружелюбный Docker на OS X с Vagrant» и получил некоторые улучшения. Вместо того, чтобы компиляция Jekyll была в 10-15 раз медленнее, она была в 2-3 раза медленнее. Так лучше, но все еще не совсем удобно.
Кто-нибудь нашел решение, которое действительно работает и позволяет продуктивно разрабатывать код с помощью Docker и OS X?
Обновление: наконец-то решение!
Наконец-то я нашел продуктивное решение с использованием Boot2Docker + rsync. Я собрал подробности того, как это настроить, в моем собственном ответе, а также в проекте с открытым исходным кодом под названием docker-osx-dev .