Когда я запускаю Laravel 5.2 в док-контейнере PHP-7, я получаю время ответа в 300ms - 400ms
,
Это очень медленно, хотя, если я просто повторяю phpinfo()
на том же контейнере время отклика 15ms - 50ms
кто-нибудь испытывает такое медленное время отклика с Laravel в контейнере Docker?
Хорошо, проблема решена.
В локальной среде разработки, использующей Docker 1.10 с драйвером VirtualBox и томом, смонтированным на хост-системе (например, Boot2Docker VM и OSX), производительность невероятно печальная, как описано выше. 300ms - 600ms
,
Используйте ту же конфигурацию без подключенных томов 20ms - 30ms
время отклика Я предполагаю, что поскольку Laravel имеет интенсивный дисковый ввод-вывод из-за большого количества файлов, которые он загружает при каждом запросе, это зависит от того, как VirtualBox распределяет папки между хостом и виртуальной машиной.
Проблема не в Docker или Laravel, это проблема виртуальной машины VirtualBox.
ОБНОВИТЬ:
Сравнение разных сред в докере
Примечание: ниже без artisan optimize --force
или же artisan config:cache
HHVM with artisan optimisations + unix sockets: 8ms - 12ms
PHP-7 FPM с ремесленными оптимизациями + сокеты unix: 38 мс — 42 мс
Взгляните на HHVM с оптимизацией и сокетами Unix. Это очень быстро
Для всех, кто сталкивается с этим вопросом через Google, Docker для Mac теперь поддерживает пользовательское кэширование для объемов.
Разные приложения требуют разных уровней согласованности. Полный
согласованность иногда важна и остается по умолчанию. Тем не мение,
поддерживать случаи, когда временное несоответствие является приемлемой ценой
для повышения производительности в Docker 17.04 CE Edge включены новые
флаги для опции -v:
- последовательный: полная согласованность. Время выполнения контейнера и хост
поддерживать одинаковый вид на гору все время. Это
по умолчанию, как описано выше.- кешируется: хост-вид на гору
авторитетный. Возможны задержки, прежде чем обновления, сделанные на хосте, будут
видимый внутри контейнера.
Включить режим кэширования для моего приложения Laravel было так же просто, как обновить ссылки на тома в docker-compose.yml.
До:
volumes:
- ./:/var/www
После:
volumes:
- ./:/var/www:cached
Сделав это изменение и воссоздав мои контейнеры, я вижу, что производительность намного больше соответствует ожидаемой от не виртуализированного локального сервера. Раньше простой запрос выполнялся за 1,3 с, а он упал до 0,35 с. Несмотря на предупреждение о том, что изменения хоста могут быть не сразу видны в контейнере, я пока не заметил каких-либо проблем с распространением.
Есть также продолжающаяся проблема GH о Производительность Docker Mac FS с некоторыми полезными заметками.