Reputation: 134
I have a slightly big Symfony app, which I was running on Docker by adding all of the files in the Dockerfile, and run everything from within the container. I was doing this only for testing purposes, but now I wanted to switch the dev environment to Docker as well, and tried using -v parameter to mount my local directory into the container using a command like this:
docker run -v /Users/username/pathtofiles:/pathtofilesincontainer -i -p 80:80 -t tag sh /pathtofilesincontainer/init.sh
This mounts the /Users/username/pathtofiles folder to /pathtofilesincontainer, and runs the init.sh successfully. init.sh is a basic shell script which doesn't have any impact on performance or anything.
My ~/.profile file is set correctly and /etc/hosts file has a directive to point current.local to DOCKER_HOST ip.
When I run the app by copying all of the files into the container via the ADD command in Dockerfile, it runs perfect ~0.5 to 1 sec response time. When I use the above command to mount the same files, it is extremely slow. Page is rendered around 25-35 seconds.
I've searched other topics under SO, but none of them really helped me. I tried disabling xdebug, setting php_ini realcache settings to suggested values, running app/console cahce:clear command, trying to connect to a local mysql server, etc... Nothing worked.
Anyone have any other ideas, or any suggestions? Thanks in advance!
My stack is: Symfony2, MySQL, Apache2, Docker 1.3.0, boot2docker 1.3.0, VirtualBox
Upvotes: 0
Views: 1521
Reputation: 2404
You can use Parallel if you have one instead of using VirtualBox to boot boot2docker machine.
Upvotes: 0
Reputation: 35169
I've heard of this sort of problem before, and the blame is usually put on the interactions between VirtualBox and the Symfony dev environment. In dev, the cache is rechecked every request, so that any changes are quickly used. Virtualbox isn't so fast when it comes to the filesystem though, and the number of files checked and updated, well, it's just too much to be quick as well.
One trick that may well be worth trying, is to set the cache and logs directory to a path outside the shared folders - under /tmp/
, or into a ram-disk, but putting the following into the app/AppKernel.php file.
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();
}
Upvotes: 1