2014-10-28 103 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。