Yes, exactly tight.
/etc/hosts might look like this:
127.0.0.1 localhost.localdomain localhost localhost4 localhost4.localdomain4
::1 localhost.localdomain localhost localhost6 localhost6.localdomain6
192.168.1.104 hostname-of-vm-you-are-logged-into
Basically you just need to add to that file:
192.168.1.105 johndoe.tld
192.168.1.106 another.tld
This file is used before DNS lookups are done. It is like a static lookup table.
With regards to DHCP, basically when the VM was created, someone will have decided either to allow them to get their IP address via DHCP or to set a static IP. Typically you would select a static IP because you don't really want the IP ever to change (which could happen if you allowed the VM to get its IP via DHCP). Of course you then also have to make a list of those IPs and make sure you don't accidentally set a second VM to use an IP used by another VM. In the meantime, any other device/workstation/pc/mac/phone/whatever will continue to get an available IP via DHCP.
To be honest you have to be quite careful when setting static IPs alongside dynamic ones given out by DHCP. Many routers allow you to specify a set range of IPs that will be allocated by DHCP, allowing you to safely use other addresses for static assignments. e.g. you the router might assign 192.168.1.10 to 192.168.1.99 via DHCP, with the others therefore being salfe to use with static IPs.
Some routers also allow you to bind a particular MAC address to a particular IP. In that situation, the VMs would be set to use DHCP but the IP they are allocated would always be the same (and configurable through the router).
But I digress.....
An important points to keep in mind is:
a) The name of the VM as shown in Proxmox may be johndoe.tld but that's just a name for the VM. A string. A symbolic identifier. It looks like a domain name but it is just a string.
b) Any hostname set within the VM is also just a string of characters in terms of the word outside the VM. A mechanism has to be set up to allow something outside the VM know the IP address associated with that string of characters. You can do this in the public DNS records of johndoe.tld, or you can manually add the hostname >> IP translation in the hosts file of every device that needs to be able to address the VM by its name instead of its IP.
Even Windows has a hosts file. I edit it all the time if I need to override an address. E.g. I can create a hosting account for johndoe.tld and build a new website for it on server A, which has IP 192.168.1.100. But the public DNS records have johndoe.tld on Server B at 1.2.3.4. By adding
192.168.1.100 johndoe.tld
192.168.1.100
www.johndoe.tld
in my Windows hosts file, my computer thinks the site is at 192.168.1.100 and therefore I can create the new site without having to stage it on a temporary domain or whatever.