Я создаю локальную среду разработки, используя 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
docker-machine-nfs $ {DOCKER_MACHINE_NAME}
—mount-OPTS = «noacl, асинхронные, NOLOCK, уегз = 3, UDP, noatime, actimeo = 1»
/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
Других решений пока нет …