Pull to refresh

Comments 62

Пожалуй, лучшее возможное, достойное завершение недавнего «цикла» статей про то, «как поднять две версии на одной машине».
Спасибо!

Единственное, что хотелось бы увидеть еще — сравнение производительности по сравнению с «локальной» установкой.

если у вас хост linux и все в докере разницы по производительности практически нет. Если же хост mac/windows то добавляются накладные расходы на волумы с хоста, обычно либо шаред фолдеры (очень медленно) либо NFS (терпимо).

Пожалуйста :) Тест производительности специально не делал, исходя из всех вариантов NFS является быстрее чем virtualbox шаред папки (тестов есть куча в интернетах). Тут ведь как, накладных расходов в виртуалки с докером минимальны, только все ложится на NFS между гостевой и хост машиной.

Окружение мне приходилось делать исходя из разных ОС у ребят в команде, поэтому искал оптимальный вариант. Также сделал возможность запуска PHP скриптов и полную настройку с IDE PHPStrorm, что было весьма не просто.
Не понятно, зачем в статью выкладывать ключи… смысл шифроввания теряется. Может, я чего-то не знаю, не понимаю здесь?..
В статье я сделал пометку, что ключи используются стандартные от Vagrant, поменять их на свои вам не составляет никакого труда.
А какой смысл устанавливать Vagrant и Docker одновременно?
Он хотел докер под мак — а под мак, как и под винду докер пашет только в виртуалке с линуксом.
Ну уж извините, не знал. Надо-же с фряхи портировали виртуалку.

@iborzenkov прав, Docker for Mac работает всё так же на виртуалке, используется HyperKit, который содержит гипервизор (на базе xhyve/bhyve). Можно прочитать про это, например, на официальном сайте.


Они раскрывают не сильно много (в репозитории docker/for-mac вообще лежит заглушка), но они просто перехали с внешних гипервизоров на Hypervisor.framework и запускают более легковесную виртуалку.

Вы правы. Но это всё равно не оправдывает использование Vagrant.

Вариант с docker for mac, если правильно помню, требует относительно нового проца с поддержной EPT, так что может быть и оправдано, хотя, имхо, проще будет использовать в этом случае их же toolbox, который даст некоторое удобство и использует тот же virtualbox.

Я испольую dinghy. Docker под мак который без виртуалбокса работает пока не избавляет от необходимости иметь виртуалку и париться с NFS.

Смысл был в развертывания окружения под разные платформы, чтобы все работало одинаково
У Docker уже есть нативные клиенты под все платформы, которые вы затрагиваете. Из-за этого из списка выпадает целый Vagrant за ненадобностью, забирая с собой часть оверхеда. Исправьте статью, не распространяйте устаревшие знания.
Спасибо за замечание, нужно сначала изучить эту тему досконально. Насколько помню были несколько проблем не решенных докером.

"нативные клиенты под все платформы" да, а вот нативных демонов нет. Всеравно под мак и винду поднимается виртуалка с linux.

Если говорить именно про клиенты, то они всё время существования всяких boot2docker, docker toolbox и т. п. были нативные под все платформы и использовали переменную окружения DOCKER_HOST, которая содержала нужный сокет, экспонированный с виртуалки.

И в этом крутота докера! Можно подключить клиент к любому докер демону (на удаленном хосте например) и задеплоить приложение в одну команду на хосте! Клево же!

Нативные клиенты то есть — клиент написать дело не хитрое.
Только вот сервер докера для запуска никсовой машины должен быть либо на линуксе либо на какой-то виртуалке — обычно это virtualbox через vagrant, но как вы мне писали что я не угадал может быть что-то еще.
Наверное производительность xhyve будет повыше vb, не знаю, но оверхед останется, так как запускаются разные ядра — линуксовое на mac.

В данном случае автор накостылил с NFS — вопрос что он сделал с virtualbox что он работает у него медленнее NFS — у NFS жалобы как раз на скорость. По сути первую часть статьи можно было заменить командой `docker-machine create` по дефолту и указать что на линуксе нужно просто поставить docker.

Поэтому я и говорю — установка docker-machine + LAMP в картинках.
Увы, но virtualbox из коробки работает медленно на практике, это сильно заметно при работе с PHP скриптами. А про линукс в статье написано, или использовать связку предложенную или нативно использовать докер. У вагранта есть свои прелести, статический адрес, тот же NFS, хост-менеджер. Опять же как говорится на вкус и цвет…
но virtualbox из коробки работает медленно

На самом деле нет. Медленно работают шаредфолдеры. Заменить их на nfs или smb под виндой и норм. Жить можно.

Да, верно, речь именно про share папки, что собственно и сделано с помощью vagrant. Вся прелесть это развернуть окружение максимально быстро.
Да, неплохая вещь, игрался с ним
Какой NFS сервер посоветуете для Windows?
Попробуйте плагин к варгранту winnfsd
Блин, руки за такое оторвать, по самую голову!
Костыли под мак притягиваете в линукс.

Короче говоря статья называется взял инструкцию для поднятия docker-machine и прикрутил туда LAMP из готовых контейнеров, плюс еще с ключами прокололся.
Для вас может так и называется, суть вы увы не уловили

я подозреваю что он имел ввиду что "вагрант в этой связке не нужен".

Ну это по мелочи. Вагрант нужен на маке и винде (или не вагрант).
Основная претензия — вместо того чтобы разобраться в сути он взял костыли для мака в картинках и перенес все на все системы.
Начало статьи — как настроить docker-machine. Со второй половины — удаленный интерпретатор и плагин докер в phpstorm в картинках.
Суть всего LAMP — docker-compose.yml причем наполовину, если уж надо 5.6 — почему не два nginx или разруливание по какому-то параметру.
Все это пример очень плохого мануала.
С недавних пор докер стал работать с виндой без всяких тулбоксов, docker-compose тоже есть. Кроме того там еще замутили красивый UI для работы с докером, в котором есть много полезных данных про окружение и тп. После того как я на винде работал через VB, нативный виндо-докер показался сказкой. Но насколько я помню работает только на win 10 pro и интерпрайз.

Да, с включенным hyper-v, они стали использовать нативную виртуализацию, но внутри там всё то же (или почти то же) минималистичное ядро, как и в toolbox.

Так-то оно так, но есть нюанс: работает он через hyper-v, а включение hyper-v автоматически блокирует возможную работу обычных виртуалок (virtualbox, например), так что если по каким-то причинам у вас есть проекты с Docker и без оного, то ваш вариант Docker-toolbox, который работает через Virtualbox

А Command Line Tools Console работает? Когда я использовал вагрант, столкнулся с тем, что приходилось исполнять команды внутри машины через терминал (artisan из laravel использовался), а без автодополнения неудобно команды вводить.
Точно вам не отвечу, скорее всего также будет работать через SSH терминал, т.к. все-таки это remote сервер с точки зрения IDE
Vagrant уже может сам установить Docker https://www.vagrantup.com/docs/provisioning/docker.html,
а docker-compose как плагин:

unless Vagrant.has_plugin?("vagrant-docker-compose")
  system("vagrant plugin install vagrant-docker-compose")  
  exit
end
В этом просто нет надобности
nerufa, У вас ничего не сказано о том, что NFS по дефолту в Windows не работает, вот с сайта Vagrant

Windows users: NFS folders do not work on Windows hosts. Vagrant will ignore your request for NFS synced folders on Windows.

Я для того чтобы их заставить работать поставил плагин vagrant-winnfsd.
Работает более-менее нормально, были непонятные проблемы только в проекте где было много симлинков (на windows) — некоторые файлы то не читались то не виделись то ещё что-то.
Скорость приемлемая — далека от нативной, но намного быстрее стандартных VirtualBox Shared Folders.
Спасибо за замечание, NFS по дефолту есть, но не во всех версиях. Добавил в статью пометку.
Ничего не мешает, задача изначально стояла другая. Упростить установку на разных ОС.

В чем же упрощение, если ваш способ требует дополнительного плагина, который указали выше? SMB работает из коробки, по крайней мере в Win10.

Окружение должно работать на разных платформах, это требование. NFS есть по дефолту, только не в урезанных хоум версиях (в компаниях хоум версии не используют). Для SMB вам нужно будет дополнительно ставить Samba сервер на виртуалку и вручную прописывать mount'ы. SMB медленнее чем NFS (статья на хабре про производительность), поэтому ждать загрузки страницы от 300ms и выше для разработки вообще вредно.

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

И вроде RemoteDebug тоже настраивать нет надобности, достаточно сервера в настройках и нажатой «трубки» на панели.
Смысл есть, здесь решается все вопросы связанные с отладкой во всех ситуациях: в браузере, cli, юнит-тестирование

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

Имеет самое что есть прямое отношение, слушать порт недостаточно, т.к. есть три кейса: в браузере, cli, юнит-тестирование. В каждом из них есть свои особенности, для того чтобы не ловить все ваши соединения нужно настраивать mapping каталогов, и устанавливать idekey (bookmarklets), скрипт запущенный в CLI моде через прослушивание вообще работать не будет, т.к. неизвестно куда именно отправлять запрос, также в случае и с unit тестированием. Данное решение с автостартом отладчика покрывает все ситуации о которых я описал выше, без надобности вносить дополнительные настройки в  PHP конфиг. И опять же мы говорим про remote интерпретатор, а не локальный.

Наверное лучше изучить тематику получше, складывается впечатление, что вы пользуетесь инструментами, не понимая, что происходит под капотом. Маппинг каталогов необходим для того, чтоб удаленный код знал, где этот же код на хосте, чтоб во время дебага подсветить нужную строку в вашей IDE. Ключ прописывается в конфиге и IDE, а для того, чтобы в вебе активировался дебаг, надо в куки положить ваш ключ. Так называемые boorkmlets(кстати есть более удобное расширение для Chrome, может и для других браузеров тоже) именно этим и занимаются. Тесты исполняются в консольном PHP, посему третьего, указанного вами варианта не существует их всего два. И если вам неизвестно куда шлется запрос, то конфигу CLI PHP это известно. Аналогично, чтоб активировать консольный дебаг, достаточно в Linux/Mac выполнить export XDEBUG_CONFIG="idekey=key_here". В заключении, повторюсь это не теория, это работает на практике в нашей команде.

Тема изучена досконально, с вами спорить я не собираюсь, совершенно разные уровни компетенции.
Возможно глупый вопрос, но какая конфигурация ПК нужна для комфортной работы? Запуск этой виртуалки + работа в phpstrom без лагов и подвисаний. ОС ubuntu 16.04
Чем больше — тем лучше. i5-i7 6-7 поколения, DDR4 16Gb в принципе на несколько лет вперед позволят вполне комфортно работать. Про SSD даже не вспоминаю, это дефолт для веб-разработчика с современным кодом с кучей include (явных или через PSR)…
то есть мне моего FX 4100 + 6 гигов DDR3 и обычный винт будет жутко мало?

получается что работать на локальном веб-сервере мне по прежнему лучше чем использовать раздельные окружения под проекты
возможно, будет достаточно, но точно без запаса на будущее.
Памяти скорее всего почти впритык. ОС, браузер, шторм и виртуалка потребляют в сумме немало.

SSD для вас — must have. Каждый раз при выполнении скрипта ваш жесткий диск должен перепозиционировать головки, чтобы считать все includе'ы, обратиться к базе данных, .htaccess для апача (если используете). Даже недорогой SSD за 2-3 т.р. обеспечивает никак не меньше 5000 IOPS (а то и все 40 000), в то время как жесткий выдает 150-500 IOPS максимум.
Спасибо за столь развернутый ответ.

под вашу конфигурацию норм, только SSD добавьте. Существенно ускорит работу, намного больше чем докупка еще 10 гигов оперативки уж точно.

Спасибо на счет SSD я давно задумываюсь, на него смонтировать раздел в котором веду все разработки, или лучше сразу всю систему на него поставить?

всю систему на него поставить. SSD на гигов 128 стоит копейки сегодня.

Sign up to leave a comment.

Articles