Вступ
Я не можу зрозуміти хорошого способу налаштування середовища розробки на 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 .