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
- 使用NFS (不适用于高层Sierra – 更多细节在这里 )
docker-machine-nfs $ {DOCKER_MACHINE_NAME} –mount-opts =“noacl,async,nolock,vers = 3,udp,noatime,actimeo = 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