我正在macOS上使用docker构建一个本地开发环境。我们有多个应用程序是用php编写的,并与Symfony一起运行。代码通过卷附加到容器上。与linux主机相比,我遇到了非常糟糕的性能。
事实证明,这个问题是由基于osxfs的挂载卷引起的,osxfs是一种共享文件系统解决方案,仅限于Docker for Mac。
这个问题在这里很好地解释了:https://blog.docker.com/2017/05/user-guided-caching-in-docker-for-mac/
引入装入卷的缓存模式后,性能有了很大的提高。但是,它允许在主机上的更新出现在容器中之前出现一些延迟。关于这一延迟,文档没有具体说明。您知道主机上的代码和容器内的代码之间的同步有多快吗?
volumes:
- ./php_code:/var/www:cached发布于 2017-12-02 22:19:53
DOCKER_MACHINE_NAME nfs ${DOCKER_MACHINE_NAME} --挂载-opts=“noacl,异步,nolock,vers=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] receivedhttps://stackoverflow.com/questions/47613108
复制相似问题