Symfony2 app对MacOS& Boot2Docker

时间:2014-10-28 20:40:04

标签: symfony virtualbox docker boot2docker

我有一个稍大的Symfony应用程序,我通过添加Dockerfile中的所有文件在Docker上运行,并从容器中运行所有内容。我这样做只是出于测试目的,但现在我也想将开发环境切换到Docker,并尝试使用-v参数将我的本地目录安装到容器中,使用如下命令:

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

将/ Users / username / pathtofiles文件夹挂载到/ pathtofilesincontainer,并成功运行init.sh。 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,Docker 1.3.0,boot2docker 1.3.0,VirtualBox

2 个答案:

答案 0 :(得分:1)

之前我听说过这种问题,而且责任通常放在VirtualBox和Symfony开发环境之间的交互上。在dev中,每次请求都会重新检查缓存,以便快速使用任何更改。虽然Virtualbox在文件系统方面并不是那么快,而且检查和更新的文件数量也很多,而且它也太快了。

可能值得尝试的一个技巧是将缓存和日志目录设置为共享文件夹之外的路径 - 在/tmp/下,或者放入ram磁盘,但将以下内容放入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();
}

答案 1 :(得分:0)

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