Best practices for assigning static IP address?

As a long time former OpenVZ user myself I am familiar with the venet style network approach it used (with boot-time templates that re-wrote config inside each container).

The nearest we have in LXD is the routed NIC type (https://linuxcontainers.org/lxd/docs/master/instances#nic-routed) as this will preconfigure a NIC with the IP addresses defined in ipv{n}.address and setup the required default route and then move the NIC into the container. This uses the same proxy ARP and static routes on the host approach as OpenVZ’s venet does.

However in order for this to work properly you would need to ensure that DHCP client and any other network config is disabled inside the container so that it doesn’t wipe out the config pre-configured on the NIC.

You would also still need to configure DNS manually.

See How to get LXD containers get IP from the LAN with routed network