Docker — задержка синхронизации кэшированного подключенного тома

Я создаю локальную среду разработки, используя docker compose на macOS. У нас есть несколько приложений, написанных на php и работающих с Symfony. Код прикреплен к контейнерам через том. Я столкнулся с очень низкой производительностью по сравнению с хостами Linux.

Оказалось, что проблема вызвана подключенным томом, основанным на osxfs, решении с общей файловой системой, эксклюзивно для Docker для Mac.

Проблема хорошо объяснена здесь: https://blog.docker.com/2017/05/user-guided-caching-in-docker-for-mac/

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

volumes:
- ./php_code:/var/www:cached

1

Решение

  1. использование NFS (не работает с Высокой Сьеррой — подробнее здесь)

docker-machine-nfs $ {DOCKER_MACHINE_NAME}
—mount-OPTS = «noacl, асинхронные, NOLOCK, уегз = 3, UDP, noatime, actimeo = 1»

  1. Держите ваши PHP кеш внутри контейнера — например в /tmp/app_cache/* — альтернативно в памяти /dev/shm/app_cache/* (не рекомендуется)

Чтобы сохранить кеш внутри контейнера изменения в вашем AppKernel.php (для Symfony 4.0 Kernel.php)

...
public function getCacheDir()
{
if ($this->environment === 'env') {
// Store in RAM.
// return '/dev/shm/symfony_docker_test/cache/'.$this->environment;

// Store in docker container (not docker-machine unless docker-compose volume is mounted).
return '/tmp/symfony_cache/cache/' . $this->environment;
}

return dirname(__DIR__).'/var/cache/'.$this->getEnvironment();
}
...

Результаты с упомянутыми решениями а также :cached

Time taken for tests:   20.396 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      82700 bytes
HTML transferred:       31900 bytes
Requests per second:    4.90 [#/sec] (mean)
Time per request:       203.963 [ms] (mean)
Time per request:       203.963 [ms] (mean, across all concurrent requests)
Transfer rate:          3.96 [Kbytes/sec] received

Результаты с упомянутыми решениями без :cached

Time taken for tests:   18.911 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      82700 bytes
HTML transferred:       31900 bytes
Requests per second:    5.29 [#/sec] (mean)
Time per request:       189.111 [ms] (mean)
Time per request:       189.111 [ms] (mean, across all concurrent requests)
Transfer rate:          4.27 [Kbytes/sec] received
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector