У меня есть образ Docker с базой данных Oracle и около 5 миллионов строк, которые мне нужно обработать.
Моя машина работает под управлением Windows 7, и я использую Docker внутри виртуальной машины Virtualbox под управлением Ubuntu. Виртуальная машина настроена с 2 ГБ ОЗУ и 4 логическими ядрами. База данных работает внутри контейнера Docker на виртуальной машине, а клиент моего приложения работает на хост-компьютере Windows. В этом случае приложение запускается и обрабатывает все за 230 секунд.
Второй сценарий — на той же хост-машине, но вместо виртуальной машины Ubuntu я использую Boot2docker. Я также настроил виртуальную машину Boot2docker на использование 2 ГБ ОЗУ и 4 логических ядер. Используя тот же образ Docker, что и раньше, я запускаю базу данных из контейнера в Boot2docker и использую Windows для запуска клиента. Однако на этот раз тест занимает 1840 секунд вместо 230.
Эти тесты повторяемы и показывают отклонение не более чем на 5%.
Помимо ЦП и памяти, сетевая конфигурация одинакова (один адаптер для NAT и один только для хоста), конфигурация хранилища одинакова и использует тот же диск на хосте, а контейнер не использует общие папки на host, поскольку я знаю, что это может вызвать проблемы с производительностью Virtualbox.
Я также пробовал тестировать с использованием виртуальной машины Debian, и производительность была такой же, как у Ubuntu.
Я в замешательстве, почему это происходит. Аппаратное обеспечение такое же, как Ubuntu, так и Boot2docker работают внутри виртуальных машин VirtualBox с одинаковой конфигурацией, но Ubuntu в 8 раз быстрее, чем Boot2docker. Есть идеи, почему?