I have a Docker image with Oracle database and around 5 million rows that I need to process.
My machine runs Windows 7, and I use Docker inside a Virtualbox VM running Ubuntu. The VM is configured with 2 GB RAM and 4 logical cores. The database is running inside a Docker container on the VM, and the client of my application runs on the host Windows machine. In that scenario the application runs and processes everything in 230 seconds.
The second scenario is on the same host machine, but instead of a Ubuntu VM I use Boot2docker. I also configured the Boot2docker VM to use 2 GB RAM and 4 logical cores. Using the same Docker image as before, I start the database from a container in Boot2docker and use Windows to run the client. However, this time the test takes 1840 seconds instead of 230.
Those tests are repeatable and show a variation of no more than 5%.
Besides the CPU and memory, the network configuration is the same (one adapter as NAT and one as host-only), the storage configuration is the same and uses the same disk on host, and the container doesn't use shared folders on the host, as I know this can cause performance problems with Virtualbox.
I also tried testing using a Debian VM and the performance was the same as Ubuntu.
I am confused on why this is happening. The hardware is the same, both Ubuntu and Boot2docker run inside VirtualBox VMs using the exact same configuration, but Ubuntu is 8x faster than Boot2docker. Any idea why?
I found the problem. When Boot2docker is installed the host-only network is created with an adapter type Paravirtualized Network. I changed it to PCnet-FAST III and it got much faster.