I use Pi Hole for DCHP / static IP allocation, other than that you're right.
I do too. The DHCP is configurable through docker-compose. I haven't worked out the static reservations through it though. But then I only have a few. And chances of having to configure it again are pretty low.
I'm pretty sure it'll be a config file that I could mount and define with some scripting if I needed to.
Edit: It is - in my case 04-pihole-static-dhcp.conf in /etc/pihole/dnsmasq.q. I mount that path so _could_ just set that as part of a docker-compose build section I suppose.