0

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

docker run -v /Users/用户名/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

4

2 回答 2

1

我以前听说过这类问题,通常归咎于 VirtualBox 和 Symfony 开发环境之间的交互。在 dev 中,每个请求都会重新检查缓存,以便快速使用任何更改。不过,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();
}
于 2014-10-28T21:29:31.600 回答
0

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

于 2015-02-05T11:21:28.100 回答