To improve testing and developing with VoLTE and LTE, I've created a full VoLTE setup in a single VM including the EPC. The scripts to create the VM can be found on the gitlab of postmarketOS. A full debian image containing the network with PLMN 901/70 can be downloaded from the blog. Additional documentation is also available in the project repository.
Everything on the graph except the eNodeB is in the VM:

The setup is build with the following software components:
- MME: open5gs-mmed
 - SGW: open5gs-sgwcd/sgwud
 - PGW: open5gs-amfd/upfd
 - HSS: pyhss
 - IMS: kamailio as p-cscf, i-cscf, s-cscf
 - PBX: asterisk
 - dns: dnsmasq to offer dns overrides
 - redis: pyhss internal communication
 - mariadb: pyhss & kamailio persistent db
 - pyhss-cli: a simple cli to manage pyhss subscribers
 
The VM network setup is:
- first interface: dhcp client. This interface will be used to nat UE traffic and for the VM iteself.
 - second interface: RAN interface, to connect a eNodeB (static addresses, no dhcp)
 
If you've a good SDR and GPSDO available, you can also use srsRAN to create a eNodeB.