2016-07-03 4 views
24

Я пытаюсь использовать докер-бет на OSX, в основном для разработки Symfony, но смонтированные тома невероятно медленны. Даже для проекта Vanilla Symfony я получаю время загрузки страницы 6s. Это невыносимо! Кто-нибудь нашел решение этой проблемы? Пытаясь отойти от бродяг, но я просто не могу найти разумный способ работать с докером.docker на медленных томах OSX

ответ

2

Нормальные тома должны быть быстрыми. Но вы не можете ничего изменить, чтобы ускорить их, если вы не хотите менять формат своего диска.

Но, возможно, узким местом является процессор или оперативная память. Вы можете проверить это с помощью команды docker stats. По умолчанию они установлены на 2 ядра и 2 ГБ оперативной памяти. Вы можете изменить это в графическом интерфейсе Docker для Mac.

+1

Ну, это даже близко к собственной скорости. Запуск простых эталонных смонтированных томов примерно на 15 медленнее, чем у родных. Я не думаю, что процессор или оперативная память - это горлышко бутылки, поскольку это происходит только тогда, когда я использую смонтированные тома. Если я поместил всю базу кода в контейнер, я получаю скорость металла. Использование процессора или оперативной памяти намного ниже, чем при использовании виртуальной машины. – Viorel

+0

Да, это с родной скоростью с linux, с тем же форматом и без гипервизора. Но объемы Docker для Mac быстрее, чем виртуальные машины – Julian

+0

Быстрее, чем VM с nfs?С помощью NFS смонтированных томов для времени загрузки страницы приложения для браузера Symphony в VM составляет около 60 мс вместо 6 с бета-версией докера. – Viorel

1

У меня было то же самое. Для меня использование docker-bg-sync (see on GitHub) значительно улучшило скорость и использование ЦП.

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

3

Я потратил много времени на поиски жизнеспособного решения. И я нашел. d4m-nfs позволяют использовать объемы докеров через nfs. В моем случае это увеличило производительность 16 раз! (1.8sec против ~ 30сек)

Также Д4М-NFS имеет довольно сложную инструкцию, так вот еще одна ссылка с подробным, например: https://github.com/laradock/laradock/issues/353#issuecomment-262897619

Я просто оставить это здесь для других Googlers.

+0

Этот выглядит многообещающе. Интересно, есть ли какой-то TL, DR, говорящий, что можно достичь простого 'docker run -rm -v' oneliner, то есть для целей' mvn install'/'grunt build' – ciekawy

+0

Я получаю сообщение об ошибке, пытающееся следовать инструкциям, вы можете объяснить шаг за шагом, что вы сделали, чтобы решить эти проблемы? –

+0

Моя ошибка была следующей: ERROR: для dbdev Не удается запустить службу dbdev: Маски запрещены:/docker-for-mac/osxfs/# namespaces для получения дополнительной информации. . /distribution/db_data_dev не используется в ОС X и не известен Docker. Вы можете настроить общие пути из Docker -> Preferences ... -> File Sharing. См. Https://docs.docker.com ОШИБКА: Ошибки при запуске проекта. –

14

Хорошо, что пользователь Spiil дал решение, но я хотел подробно остановиться на точных шагах, которые я предпринял с тех пор, как я проработал 12 часов, пытаясь понять это, но как только вы знаете, как его супер легко и исправляет все проблемы с замедлением!

Ключевым моментом здесь является понимание этого решения, который создает диски NFS (Network File System) как средства связи из контейнеров Docker на ваш Mac вместо стандартной файловой системы OSX, которая в настоящее время очень медленная, либо из-за ошибок, либо как это работает *

Выполните следующие шаги точно.

1.) Клонировать это репо здесь (https://github.com/IFSight/d4m-nfs) в вашем домашнем каталоге. Для этого откройте терминал и введите cd ~

Затем введите git clone https://github.com/IFSight/d4m-nfs

В качестве альтернативы вы можете также сделать это в один лайнер git clone https://github.com/IFSight/d4m-nfs ~/d4m-nfs

2.) Далее зайдите в папку d4m-nfs и создайте новый файл в папке/etc и запишите его d4m-nfs-mounts.txt

3.) Добавьте сюда следующие строки кода.

/Users/yourusername:/Users/yourusername:0:0 

Что выше делает позволяет по-прежнему использовать относительные папки с Докером-композом и позволяет все порты для подключения на ней, следовательно, 0: 0.

EDIT Не ставьте/тома здесь!

4.) Перейти к вашим докеров предпочтения и сделать следующее

enter image description here

Убедитесь только/TMP не показывает и ничего другого. Я имею в виду, что ничего другого он не будет работать, если есть что-то еще, так как это создаст конфликты с системами NFS, которые скрипт сделает для вас позже. Перезагрузите докер и докер, скомпилируйте все контейнеры.

5.) Наконец перейти к Д4М-NFS каталог, который мы создали в шаге 1, и введите следующую команду, /bin/bash d4m-nfs.sh

редактировать Правильный способ набрать выше команды это как другой пользователь из GitHub (if-kenn) указал, ./d4m-nfs.sh, который использует Shebang для какой оболочки должен запускать его.

Если все сделано правильно, ошибок не должно быть, и это должно сработать. Обратите внимание, что НЕ ПРОПУСТИТЕ, поскольку sh d4m-nfs.sh это создаст ошибки, и вам нужно будет удалить файл экспорта, чтобы начать все заново. Фактически в любое время, когда вы вносите какие-либо изменения, вам придется очистить файл экспорта.

Это то, на что похожа моя.

enter image description here

EDIT :: ВАЖНО - Удалите/приватным и объемы! Это должны быть только пользователи/имя пользователя сейчас!

Если вы видите что-то другое, кроме этого, вы не работаете с bash. Вы можете быстро добраться до файла экспорта, как это на Mac, если вы делаете какие-либо ошибки и просто очищаете его, чтобы начать все заново.

Просто выберите Переход к папке

enter image description here

, а затем введите /etc/exports

Это хороший ярлык, чтобы быстро добраться до него и очистить его в вашем любимом текстовом редакторе.

Также убедитесь, что контейнеры не работают, или вы получите цикл смерти ......... Если этот цикл смерти продолжается, убедитесь, что вы обновили докер, а затем перезагрузите компьютер. Да, перезагрузка ... казалось, это единственный способ заставить его работать на компьютере моих друзей. См. Это (https://github.com/IFSight/d4m-nfs/issues/3)

Примечание для .... петля. Недавно я нашел другое решение. Убедитесь, что вы НЕ зарегистрированы как root, и убедитесь, что вы поместили git repo в папку users ~, а не в корневую папку.Другими словами, это должно быть в User/username.

Кроме того, убедитесь, что папка/tmp имеет полные права на запись, так как сценарий должен здесь писать, иначе это тоже не сработает. chmod 777 -R /tmp

6.) Если вы сделали это правильно при запуске скрипта, это будет выглядеть так.

enter image description here

Тогда просто запустите ваш докер-компоновать до -d как обычно в папку Symfony проекта (или любой другой проект, который вы используете с грузчиком) и все должно работать ... кроме NO MORE замедлений !

Вам необходимо запустить его в любое время при перезагрузке компьютера или докере.

Также обратите внимание, что при появлении ошибок установки у вас, вероятно, нет вашего проекта, хранящегося в вашем каталоге Users/username. Помните, что мы установили его. Если ваш проект где-то не там, вам нужно будет соответствующим образом изменить файл d4m-nfs-mounts.txt.

Другая информация:

enter image description here

+0

Просто быстрый вопрос, это решение быстрее, чем решение здесь? Https: //forums.docker.com/t/how-to-speed-up-shared-folders/9322/15 Я думал, что могу использовать лучший один :) Любые указатели были бы полезны – AshwinKumarS

+0

Да, это потому, что в основном используется подход к общей папке –

+1

Сохранено в моей жизни, большое вам спасибо @JosephAstrahan – thiagotonon

4

Для людей, читать это сейчас, может быть, лучше подождать Docker, чтобы решить эту проблему. Для повышения производительности уже принят запрос на вытягивание (https://github.com/docker/docker/pull/31047). Это будет выпуск где-то в апреле 2017 года и должно быть большим улучшением.

Я пробовал некоторые обходные пути для Docker для Mac, но все они имели некоторые довольно большие недостатки, в основном в удобстве использования. Хороший источник альтернатив OSXFS можно найти по адресу: https://github.com/EugenMayer/docker-sync/wiki/Alternatives-to-docker-sync. Кредиты для Eugen Mayer для настройки этого.

EDIT: Первое усовершенствование реализовано в выпуске кромки. https://github.com/docker/for-mac/issues/77 есть больше информации по этому вопросу.

1

В последней докере 17.06.0-ce-mac18 томов, смонтированных с помощью кэширования, кажется, работает вполне прилично.

+1

Я так не думаю. Я использую докер 17.06.0-ce-mac18 (18433) для приложения Ruby on Rails. Но скорость все равно отстойная. –

+0

, но вы установили тома с помощью: cached? Вы должны изменить файл docker-composer.yml или перейти в cli. Я тестировал с помощью vanilla Symfony3, а скорость страницы составляет около 200 мс, что намного лучше, чем 6с :) – Viorel

+0

Я 'кэшировал тома на' томах:.:/Project_name: cached', но похоже, что это не работает. Тем не менее скорость медленная. Для загрузки веб-страницы требуется много времени. –

0

Я обнаружил, что создание виртуальной машины CoreOS под Parallels, а затем использование Docker, находящегося внутри CoreOS, намного быстрее, чем Docker для Mac (в настоящее время работает версия 17.12.0-ce-mac49 (21995)).

Я делаю сборку кода Linux с использованием CMAKE/Ninja/GCC, и это почти в два раза быстрее, чем точная сборка из Docker для Mac.

В моем случае у меня есть тонна источников библиотеки, которые являются частью контейнера (например, Boost, OpenSSL), и приличное количество кода на C++, которое я сохраняю локально на моем Mac.

Это, кажется, недавняя разработка. Docker/Mac стал намного медленнее, чем я помню, что это месяц или два назад. Может быть, это просто я ...