Как правильно настроить среду разработки на OS X с помощью Docker?



интро



Я не могу найти хороший способ настроить среду разработки на OS X с помощью Docker и Boot2Docker. Проблема, с которой я сталкиваюсь, заключается в том, как управлять исходным кодом так, чтобы:




  1. Я могу изменить код на OS X с помощью инструментов (текстовый редактор, IDE, git и т. д.), которые я уже установил.

  2. эти изменения отражаются в контейнере Docker, поэтому, если я повторно запускаю тесты или обновляю веб-страницу, Я вижу свои изменения немедленно.


теоретически это должно быть легко сделать, установив мой исходный код в виде Тома:



docker run -it -v /path/to/my/source/code:/src some-docker-image


к сожалению, это имеет две основные проблемы, которые делают его полностью непригодным для использования в OS X:



Проблема №1: смонтированные Тома на виртуальной коробке (которые используют vboxsf) чрезвычайно медленны



например, вот сколько времени требуется Джекилу, чтобы скомпилировать мой Домашняя страница если исходный код является частью Докер изображение:



> 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


вот точно такой же образ Докера, за исключением этого времени, я монтирую исходный код из 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) и опробовали несколько из них, но не нашли успешного:




  1. Я переключил Boot2Docker для использования NFS, но это было так медленно.

  2. я попробовал Vagrant + NFS, и это тоже было так же медленно.

  3. Я пробовал Самбу гора, но папка всегда показывалась пустой в контейнере Docker.

  4. Я пытался использовать unison file system, который работал кратко для синхронизации файлов, но тогда держали показывать ошибки подключения.

  5. я включил опрос в Джекил, но это значительно увеличило задержку, пока мои изменения не были подобраны.

  6. пробовал Тузик, "более быстрый, дружелюбный Докер на OS X с Vagrant" и получил некоторые улучшение. Вместо того, чтобы компиляция Джекила была в 10-15 раз медленнее, она была в 2-3 раза медленнее. Это лучше, но все еще не совсем пригодно.


кто-нибудь нашел решение, которое действительно работает и позволяет продуктивно разрабатывать код с помощью Docker и OS X?



обновление: наконец-то решение!



я наконец нашел решение, которое кажется продуктивным с помощью Boot2Docker + rsync. Я захватил детали о том, как настроить это в моем собственном ответе, а также проект с открытым исходным кодом под названием docker-osx-dev.

819   10  

10 ответов:

Я решил добавить свой ответ лучшее решение я нашел до сих пор. Я обновлю это, если найду лучшие варианты.

лучшее решение до сих пор

лучшее решение, которое я нашел для настройки продуктивной среды разработки с Docker на OS X:Boot2Docker + Rsync. С помощью rsync время сборки в контейнере Docker находится на одном уровне с запуском сборки непосредственно на OSX! Кроме того, код наблюдателя файлов делает не необходимость опроса (inotify работает, так как rsync использует обычные папки), поэтому горячая перезагрузка почти как быстро.

есть два способа его настройки: автоматическая установка и ручная установка.

автоматизированная установка

я упаковал все шаги для настройки Boot2Docker с Rsync в проект с открытым исходным кодом под названием docker-osx-dev. Код немного грубый, но я успешно использую его в течение нескольких лет недели, чтобы легко переключаться между 3 проектами с 3 различными стеками технологий. Попробуйте, сообщите об ошибках и отправьте некоторые PRs! Кроме того, смотрите мой пост в блоге,продуктивная среда разработки с Докером на OS X для получения дополнительной информации.

руководство по установке

  1. установить Boot2Docker:brew install boot2docker.
  2. запустите Boot2Docker, но с отключенными общими папками VirtualBox:boot2docker init && boot2docker start --vbox-share=disable.
  3. выполнить boot2docker shellinit и скопируйте переменные среды он печатает в ваш .
  4. установите rsync на виртуальную машину Boot2Docker:boot2docker ssh "tce-load -wi rsync".
  5. создайте необходимые базовые папки на виртуальной машине Boot2Docker и правильно установите для них разрешения. Например, если вы будете синхронизировать /foo/bar папка из OS X, вам нужно создать /foo/bar на виртуальной машине Boot2Docker: boot2docker ssh "mkdir -p /foo/bar && chown -R docker /foo/bar".
  6. запустите rsync для синхронизации файлов с виртуальной машиной Boot2Docker:rsync --archive --rsh="ssh -i $HOME/.ssh/id_boot2docker -o StrictHostKeyChecking=no" /foo/bar docker@dockerhost:/foo. Проверьте документы rsync для различных параметров, которые вы можете включить, например используя --exclude .git исключить при синхронизации.
  7. использовать файл Watcher, чтобы сохранить файлы в синхронизации. Например, вы можете использовать fswatch (brew install fswatch) передается в rsync.
  8. на данный момент, Вы должны быть в состоянии использовать docker run чтобы запустить контейнер Docker и использовать -v флаг для подключения папки, которую вы синхронизируете:docker run -v /foo/bar:/src some-docker-image.
  9. Обновить код на OS X, как обычно. Изменения должны распространяться очень быстро, используя rsync, нормальный файл watcher код должен забрать изменения, как обычно (т. е. с помощью inotify), и сборка должна выполняться быстро, потому что все файлы являются "локальными" для контейнера.
  10. Если вам нужно протестировать работающий сайт, запустите boot2docker ip команда, чтобы узнать, какой IP он включен.

обновление: теперь что докер для mac находится в бета-версии с функциями без взлома, этот маршрут может быть намного более разумным для локального развития без хаков и обходных путей эссе.

не. Я знаю, что это не тот ответ, на который вы, вероятно, надеетесь, но возьмите честную оценку стоимости/выгоды от попытки получить локальный исходный код + докеризованное выполнение против просто локальной разработки на OSX.

At в какой-то момент все проблемы, усилия по настройке и операционные болевые точки могут быть решены достаточно хорошо, но на данный момент мое мнение об этом-это чистый убыток.

Проблема №1: смонтированные Тома на виртуальной коробке (которые используют vboxfs) чрезвычайно медленны

подождите некоторое время, и это почти наверняка улучшится.

Проблема №2: просмотр файлов нарушен

Я не уверен, что исправить это в ближайшем будущем. Если этот тип функциональность является ключом к вашему рабочему процессу разработки, я бы счел это dealbreaker. Это не стоит больших усилий в области НИОКР по сравнению с просто использованием rbenv/bundler для управления вашими установками jekyll / ruby и запуска их локально на OSX, как люди успешно делали в течение последнего десятилетия+.

Так же, как "облако" имеет нулевое участие в моей локальной настройке разработки, на данный момент docker является выигрышем для тестирования / постановки / развертывания и для запуска баз данных и других третьих сторон компоненты, но приложения, которые я на самом деле кодирую, запускаются прямо на OSX.

Docker для Mac и Windows должен быть окончательный способ разработки с Docker на OS X (и Windows). Продукт Docker, программное обеспечение-это " интегрированная, простая в развертывании среда для создания, сборки и доставки приложений с Mac или Windows."Это направлено на то, чтобы быть в состоянии решить проблемы, представленный ОП. Из его 24 марта 2016:

  • быстрее и надежнее: нет больше VirtualBox! докер движок работает в дистрибутиве Alpine Linux поверх виртуальной машины xhyve на Mac OS X или на виртуальной машине Hyper-V в Windows, и эта виртуальная машина управляется приложением Docker. Вам не нужно docker-machine для запуска Docker для Mac и Windows.
  • интеграция инструментов: Docker для Mac-это приложение Mac, а Docker для Windows-это приложение Windows, включая собственный пользовательский интерфейс и возможность автоматического обновления. Набор инструментов Docker поставляется в комплекте с ним: Docker command line, Docker Составьте, и Docker нотариус командной строки.
  • установка Тома для вашего кода и данных: доступ к данным Тома работает правильно, включая уведомления об изменении файлов (на Mac inotify теперь работает без проблем внутри контейнеров для каталогов, подключенных к тому). Это позволяет редактировать / тестовые циклы для разработки "в контейнере".
  • легкий доступ к запущенным контейнерам в локальной сети хоста: Docker для Mac и Windows включают DNS-сервер для контейнеров и интегрированы с Mac OS X и сетевая система Windows. На Mac Docker можно использовать даже при подключении к очень ограничительной корпоративной VPN.
  • Docker для Mac был спроектирован с нуля, чтобы соответствовать модели безопасности OS X sandbox, и мы тесно сотрудничаем с Apple для достижения этой цели.

отказ от ответственности: я могу быть предвзятым, так как я являюсь автором docker-sync.

Я, вероятно, пробовал все решения, названные здесь, в том числе некоторые другие (см. compersion https://github.com/EugenMayer/docker-sync/wiki/Alternatives-to-docker-sync), но они в основном либо не удалось на стороне производительности (большинство из них) или на докер-машине (или нет) используется / принудительно.

http://docker-sync.io был построен, чтобы объединить все решения и обеспечивают лучшие стратегии (реализуя несколько, вы можете выбрать).

Он может быть использован с rsync (1 способ синхронизации), включая исправления разрешений для пользователей, и с unison (2 способ синхронизации). Это не заставляет вас в docker-machine или конкретный гипервизор, а также не требует, чтобы у вас был docker для Mac. Он работает со всеми из них.

производительность EugenMayer / docker-sync/wiki / 4.-Производительность не влияет, это как у вас нет доли в все.

docker-sync и его наблюдатели за изменениями оптимизированы и работают с проектами с файлами 12k без проблем.

дайте ему попробовать, если хотите, я хотел бы услышать обратную связь!

Я чувствую тебя! Я думаю, что я пробовал почти все, что вы пробовали, и, к сожалению, это было все еще медленно. Затем я наткнулся на этот комментарий https://github.com/boot2docker/boot2docker/issues/64#issuecomment-70689254 это предполагает использование Vagrant и Parallels и вместо Virtualbox. Это позволило мне использовать nfs, и я действительно увидел большой прирост производительности для моего проекта (Drupal).

вот файл бродяги. Все, что вам нужно сделать, это установить vagrant, скопировать это в a файл называется Vagrantfile и помещается в какую-то папку. Перейдите в эту папку и просто сделайте vagrant up вместо вашего обычного boot2docker вверх.

Vagrant.configure(2) do |config|
  config.vm.box = "parallels/boot2docker"

  config.vm.network "forwarded_port", guest: 80, host: 80

  config.vm.synced_folder(
    "/Users/dicix/work/www", "/vagrant",
    type: 'nfs',
    nfs_udp: true,
    mount_options: %w[actimeo=2],
    bsd__nfs_options: %w[alldirs maproot=root:wheel]
  )
end

Я также использую Vagrant с parallels и boot2docker (https://github.com/Parallels/boot2docker-vagrant-box). развитие никогда не было проще для меня. Работает очень хорошо с docker-compose и большим объемом. Я действительно не чувствую задержки или массового потребления ресурсов.

Это то, что моя Vagrantfile выглядит так:

Vagrant.configure(2) do |config|

  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.box = "parallels/boot2docker"

  config.vm.synced_folder "/Users", "/Users", type: "nfs", mount_options: ["nolock", "vers=3", "udp"], id: "nfs-sync"

end

Я уже несколько недель разрабатываю среду OS X (mid 2011 Macbook Air) + Boot2Docker + Docker-compose. Не сталкивались с серьезными проблемами производительности, но я избегаю запуска какой-либо сборки при разработке (почему бы не использовать что-то вроде jekyll serve --skip-initial-build?). Вот пример docker-compose.yml файл, который я использую:

docker-compose.yml:

test:
  build: .
  volumes:
    - ./client:/src/client
    - ./server:/src/server
    - ./test:/src/test
  command: nodemon --exec jasmine-node -- test/ --verbose --autotest --captureExceptions --color
  environment:
    - DEBUG=*

Dockerfile:

FROM node:0.12

RUN mkdir -p /src
WORKDIR /src

ENV PATH=/src/node_modules/.bin:$PATH

# We add package.json first so that we the
# image build can use the cache as long as the
# contents of package.json hasn't changed.

COPY package.json /src/
RUN npm install --unsafe-perm

COPY . /src

CMD [ "npm", "start" ]
EXPOSE 3000

Я иногда использую NFS (http://syskall.com/using-boot2docker-using-nfs-instead-of-vboxsf/), но не заметили большой разницы в производительности при этом.

для меня, удобство простой docker-compose up test чтобы заставить мою среду работать, это стоило затрат на производительность (я обычно работаю над несколькими проектами с разными стеками).

PS:nodemon является одним из немногих наблюдателей файлов, которые работают с vboxsf (см. https://github.com/remy/nodemon/issues/419).

настройки унисон работает как шарм! https://github.com/leighmcculloch/docker-unison

двунаправленная синхронизация, с очень хорошими характеристиками!

получение настройки для работы в качестве инструмента развития. Но это будет больно. Я задокументировал этот процесс здесь:

http://harmingcola.blogspot.com/2015/05/how-to-setup-docker-as-development-tool.html

этот метод является последним (сентябрь 2015) и самый простой способ получить настройки Docker на Mac: вот ссылка:

вы устанавливаете Docker с помощью Docker Toolboxссылка на инструкцию здесь:

Это полный пакет установки, настройки, это включает в себя следующие инструменты Docker:

Docker Machine для запуска двоичного файла docker-machine

Докер двигатель для запуска докера двоичный

Docker Compose для запуска docker-compose binary

Kitematic, графический интерфейс Docker оболочка, предварительно настроенная для среды командной строки Docker

Oracle VM VirtualBox

enter image description here

что в наборе:

  • Docker Client
  • Настройки Машины
  • Docker Compose (только для Mac)
  • Докер Kitematic
  • VirtualBox

Comments

    Ничего не найдено.