Законфигурировать 20 проектов под докер сложно. Доменные имена прописывать каждому проекту нужно через dns или hosts, но тогда нужно извращаться с портами или подсетями в docker-compose. Плюс к этому, чтобы подружить несколько проектов в одном контейнере и переиспользовать тот-же mysql, нужно потратить не один вечер, изучая докер. А если на 20 проектов плодить по 3 контейнера nginx php mysql, то никаких ресурсов не хватит.
В общем по собственному опыту могу сказать: юзайте докер, только не держите в 1 пхп контейнере 20 проектов(не надо из докера делать вагрант), работайте по схеме: работаю с проектом X, запустил композ проекта X, работаю с проектом Y, выключил проект X и запустил Y. Но опять же это неудобно. Оставайтесь в dev режиме на vagrant+ansible, в stage и prod на docker+ansible. Ansible поможет держать пакеты под версиями, так что различий между стендами не должно быть, изменится только способ запуска проекта.