I normally advocate the use of container technologies like LXC, LXD or Docker which share the host OS kernel and are initiated from an image. Virtual machines also use images to emulate a disk drive, but the operating system is installed just like on a physical machine.
Virtual Machines have their own dedicated kernel which can be an advantage for certain applications which may require custom kernel access.
Check to make sure that your computer supports virtualization.
egrep -c '(vmx|svm)' /proc/cpuinfo
sudo apt install -y qemu-kvm virt-manager libvirt-daemon-system virtinst libvirt-clients bridge-utils
Enable and start Virtualization.
sudo systemctl enable --now libvirtd sudo systemctl start libvirtd
Add your user account to virtualization groups.
sudo usermod -aG kvm $USER sudo usermod -aG libvirt $USER
Check to see if nesting is enabled.
If the above command returns a “Y”, then nesting is already enabled.
To enable nesting on an Intel system.
sudo modprobe -r kvm_intel sudo modprobe kvm_intel nested=1
To enable Nesting permanently.
sudo nano /etc/modprobe.d/kvm.conf options kvm_intel nested=1
If you have an AMD processor, replace the instances of “intel” above with “amd”.
To create a KVM VM, use “virt-manager” as seen in the video.
To install LXD in your VM.
sudo snap install lxd
As seen in my other videos, you must initialize LXD before use.
sudo lxd init
Add your user account to the lxd group and see that it is added.
sudo usermod -aG lxd $USER newgrp lxd groups
Create your first LXD container.
lxc launch ubuntu:20.04 mylxd --profile default -c boot.autostart=true
Be sure to watch my 30+ videos that discuss LXD in depth.