I'm running pihole in a Docker container on an Intel NUC, performance is great. Client (browser) performance has also improved remarkably. One problem is getting ipv6 working between host, container and the outside world is non-trivial and non-obvious compared to ipv4 - I still haven't figured it out.
Typically you go into your your router's DHCP settings and populate DNS with the pihole DNS, or disable DHCP on your router and let pihole do DHCP. The gotcha is if you have an ISP supplied router which has no DHCP interface at all: no way to disable it, no way to customize DNS. All of Xfinity's hardware now does this for residential, you have to pay for business service to set DNS servers.
> The gotcha is if you have an ISP supplied router which has no DHCP interface at all: no way to disable it, no way to customize DNS.
The way I get around this is by putting all of my devices behind another router, and treating the ISP router as if it is part of an external network. It introduces a second layer of NAT (ISP router gives my router a 192.168.0.x address, which it treats as its WAN IP; devices get a 192.168.1.x address), but in practice it's caused me no problems. I've been running a similar setup for close to a decade now.
I had this same problem with Xfinity and just switched to using my own modem & router. Switching to your own hardware should save you $10/month anyway unless you're on some kind of building-wide plan.
For me it was worth it to spend the money and have full control over my hardware.
Typically you go into your your router's DHCP settings and populate DNS with the pihole DNS, or disable DHCP on your router and let pihole do DHCP. The gotcha is if you have an ISP supplied router which has no DHCP interface at all: no way to disable it, no way to customize DNS. All of Xfinity's hardware now does this for residential, you have to pay for business service to set DNS servers.