На чём лучше вести локальную разработку?
Упрощенно. 
Вагрант — система управлением конфигурацией конкретной машины.
Докер — запуск изолированных процессов на машине.
Докер. 
Это не виртуальная машина, а запуск изолированных процессов. Т.е., запущенный процесс думает, что он один единственный, и ничего вокруг нет. Это работает на уровне ядра Linux. Без использования виртуальных машин.
В терминологии Докера есть Images и Containers.
Image — образ, шаблон, на основе которого запускается Container.
Image строится на основе какого-либо базового образа ОС. 
Container — сервис, запущенный и построенный на базе Image.
Таким образом, вы можете построить несколько образов, например, образ для Nginx, образ для PHP, образ для MySQL. Вдобавок, вы можете построить несколько образо, для каждой желаемой версии PHP, MySQL и т.п. 
Каждый из этих образов будет иметь у себя в базе какую-либо ОС. Т.е., происходит изолирование окружения, на котором работает Docker.
На базе построенных образов вы можете запускать  Containers, т.е., непосредственно строить рабочее окружение. Каждый запущенный контейнер думает, что он запущен один, в образе наследуемой ОС. Но на самом деле, это всего лишь отдельный процесс, работающий на уровне ядра Linux, без виртуализации. Т.е., у вас нет накладных расходов на виртуальные машины. Изолирование контейнеров выполняется на уровне ядра.
При всем этом, ваша базовая система остается чиста от устанавливаемых пакетов, свободна от неразберихи с библиотеками, версиями и т.п. 
Оба инструмента хороши. Но у каждого свое назначение. 
Vagrant  — великолепный инструмент для конфигурации удаленных машин с нуля, VDS/VPS и т.п.
Docker — великолепный инструмент для быстрого развертывания/переконфигурации рабочего окружения, практически без изменения системы, на которую он устанавливается.
Ну можно в виртуалбоксе настроить vps и пользоваться как хостингом для разработки, зачем изобретать...!?