I do that with lxd, but I have written ansible playbooks (almost like dockerfile? ) to automate the lxd containers. You could probably write some automation for scaling as well, but not something I’ve done, I have just opted for high availability with ceph & keepalived. Whatever works for your use case :) I do use some docker, but this is still nested inside lxd…
I’m not huge into customising desktop environments, so when I’ve tried window managers like i3, I typically only get it functional to my likings and then realise how boring I am compared to how others use it.
So typically I use gnome or kde, but I like cinnamon and xfce as well. I don’t really have a favourite, they’re all good. At the minute I am trying to adopt wayland and have been using gnome while I do that.