вступление
Я не могу найти хороший способ настроить среду разработки на 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
[email protected]:/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
[email protected]:/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.