I use it for two primary use cases:
A) testing an ha update
B) developing or enhancing new functionality.
The first, it pretty straightforward. Copy the config to a new container, disable the recorder and start it up.
For the second, I make extensive use of parameritized packages and shell scripts to create the actual HA config packages. As an example, every one of my temperature sensors runs through a filter, has high and low alarm limits, alerts, and input_booleans to enable/disable alerting, etc. When developing this I create a simulation package - in this example - an input_number for the temperature value and a template sensor for that input_number. So I’ll test that package. Once it’s working the config gets replicated for all my actual temperature sensors. When I find a problem or want an enhancement - change it in one place and rereplicate. I use private GitHub repos for my templates and the two target prod systems (we have two houses). GitHub is great for change control and I can see what has changed in the Config before deploying it to prod.
Using docker is nice, because you can have an unlimited number of containers. For example, I have one that I use to test hvac, etc.