Today I was working on a php development environment using docker on MacOSX (you might run into the same problems on windows, too!). The
osxfs
in Docker for Mac is painfully slow and the company behind docker is
actually aware of that. At
#77 they track the issue at docker-for-mac right now. At the time of writing the
ticket is still open.
If you happen to use symfony as PHP framework or in particular composer as package manager for php projects, you end up
with a very big directory called vendor
.
In symfony standard edition I am counting 10259 files and folders.
For this blog post I put a vanilla symfony 3.2.7 project at DracoBlue/symfony-composer-docker-performance-test.
With this commit
I added a docker-compose.yml
and a nginx.conf
to run app.php
on http://app.locahost.me:8080
and
app_dev.php
on http://dev.locahost.me:8080
.
If you run a quick benchmark against app_dev.php:
$ ab -n 1000 -c 16 http://dev.localtest.me:8080/
Concurrency Level: 16
Time taken for tests: 319.303 seconds
Complete requests: 1000
Failed requests: 0
Requests per second: 3.13 [#/sec] (mean)
Time per request: 5108.845 [ms] (mean)
Time per request: 319.303 [ms] (mean, across all concurrent requests)
Transfer rate: 131.33 [Kbytes/sec] received
you end up with response times for a vanilla symfony project of round about 319ms.
The app.php:
$ ab -n 1000 -c 16 http://app.localtest.me:8080/
Concurrency Level: 16
Time taken for tests: 86.140 seconds
Complete requests: 1000
Failed requests: 0
Requests per second: 11.61 [#/sec] (mean)
Time per request: 1378.234 [ms] (mean)
Time per request: 86.140 [ms] (mean, across all concurrent requests)
Transfer rate: 54.50 [Kbytes/sec] received
looks better (86ms), but is not very convenient for development.
Let's tune this with a simple trick down to 46ms (-85%) for app_dev.php and down to 9ms (-88%) for app.php.