В теории виртуализация дает лучшую изоляцию, то есть с точки зрения последствий взлома виртуалки хост и другие виртуалки будут более защищены, но виртуалки медленно запускаются и имеют большие накладные расходы.
С другой стороны если правильно организовать связи между контейнерами в Docker, то взломав Nginx контейнер получить доступ к БД просто так не получится, так что тоже вполне себе неплохой вариант.
В общем всё зависит от уровня паранойи, но как по мне, гораздо важнее оперативное обновление уязвимого ПО.
Лично я предпочитаю удобство контейнеров.