For me I’m a big DevOps guy personally, I use Docker and Kubernetes anytime that I can, because it’s SO easy to setup once you understand it. Can spin up, route and connect anything etc. handle encryptions, firewalls, all of that jazz. I try to avoid VMs unless it’s going to host things like as a server. Then I’ll make a host VM and load it with containers and internetwork the containers.
Then route between VM servers using mininet to a similar way you’d network if you had physical racked servers connected to a network switch etc.
Even an M1 Mac Mini with 8 GB of RAM can handle a lot of MongoDB, web servers etc. the largest container is my Apollo GraphQL which serves as a replication sync, and data transit node to orchestrate data between an 11 node MongoDB replica set, 5 Redis DB replica sets, and 5 CouchDB replica sets. All in 100% sync with 3GB of RAM allocated to it.