Docker – caching的已安装卷同步延迟

我正在用macOS构build一个使用docker撰写的本地开发环境。 我们有多个用php编写的应用程序,并且可以在Symfony中运行。 代码通过卷附加到容器上。 与linux主机相比,我遇到了一个非常糟糕的performance。

事实certificate,问题是由基于osxfs的挂载卷导致的,这是一个共享的文件系统解决scheme,是Docker for Mac独有的。

这个问题很好的解释在这里: https : //blog.docker.com/2017/05/user-guided-caching-in-docker-for-mac/

引入已安装卷的caching模式后,性能大大提高。 但是,在容器中出现主机更新之前,它允许一些延迟。 文档没有具体说明这个延迟。 你知道主机上的代码和容器内部的代码之间的同步有多快?

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

  1. 使用NFS (不适用于高层Sierra – 更多细节在这里 )

docker-machine-nfs $ {DOCKER_MACHINE_NAME} –mount-opts =“noacl,async,nolock,vers = 3,udp,noatime,actimeo = 1”

  1. PHPcaching保存在容器中 ,例如在/tmp/app_cache/* ,或者在内存/dev/shm/app_cache/* (不build议)

为了让容器内的caching更改在你的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(); } ... 

结果提到的解决scheme :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 

结果与解决scheme提到没有 :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