2014-10-28 108 views
0

我有一个稍大的Symfony应用程序,我在Docker上添加Dockerfile中的所有文件,并在容器中运行所有文件。我这样做只是为了测试目的,但现在我想将开发环境切换到Docker,并尝试使用-v参数将本地目录安装到容器中,如下所示:Symfony2应用程序在MacOS和Boot2Docker上的响应速度很慢

docker run - v/Users/username/pathtofiles:/ pathtofilesincontainer -i -p 80:80 -t tag sh /pathtofilesincontainer/init.sh

这会将/ Users/username/pathtofiles文件夹挂载到/ pathtofilesincontainer,并运行init。顺利地。 init.sh是一个基本的shell脚本,它不会对性能或任何事情有任何影响。

我的〜/ .profile文件设置正确,/ etc/hosts文件有一个指向current.local指向DOCKER_HOST IP的指令。

当我通过Dockerfile中的ADD命令将所有文件复制到容器中运行应用程序时,它运行完美〜0.5到1秒的响应时间。当我使用上述命令安装相同的文件时,速度非常慢。页面呈现在25-35秒左右。

我在SO下搜索了其他主题,但没有一个真正帮助我。我尝试禁用xdebug,将php_ini realcache设置设置为建议值,运行app/console cahce:clear命令,尝试连接到本地mysql服务器等等......没有任何工作。

任何人有任何其他的想法,或任何建议吗?提前致谢!

我的堆栈是:Symfony2中,MySQL的,的Apache2,多克尔1.3.0,1.3.0 boot2docker,VirtualBox的

回答

1

我听说过这类问题之前,和怪通常被放在之间的相互作用VirtualBox和Symfony开发环境。在开发中,每次请求都会重新检查缓存,以便快速使用任何更改。当涉及到文件系统的时候,Virtualbox并没有那么快,而且检查和更新的文件数量也不是很多,而且速度太快了。

可能值得尝试的一个技巧是将缓存和日志目录设置为共享文件夹之外的路径 - 在/tmp/之下,或者设置为ram-disk,但将以下内容放入app/AppKernel.php文件。

public function getCacheDir() 
{ 
    if (in_array($this->environment, array('dev'))) { 
     return '/dev/shm/symfonyprojectname/cache/' . $this->environment; 
    } 
    return parent::getCacheDir(); 
} 

public function getLogDir() 
{ 
    if (in_array($this->environment, array('dev'))) { 
     return '/dev/shm/symfonyprojectname/logs'; 
    } 
    return parent::getLogDir(); 
} 
+0

感谢您的回答。我今天会尝试。 – afkplus 2014-10-29 23:47:34

+0

我尝试过,但没有看到页面响应时间的明显改善。 – Nicodemuz 2015-03-15 05:03:32

+0

这是真的,我有一个docker-compose与一些服务,并且boot2docker机器上的交互非常缓慢。创建一个Ubuntu VM并使用docker(和docker-compose)运行它几乎可以达到原生速度。有些问题与Virtualbox在boot2docker中使用的vboxfs有关,所以在解决这些问题之前,必须查找替代方案 – rajasaur 2016-01-31 18:46:26

0

如果您有一个而不是使用VirtualBox来启动boot2docker机器,则可以使用Parallel。