Part of the fun of it, to my mind, is that there’s an almost unlimited number of ways to skin the cat….
For me, where docker-compose shines, is being able to spec out an entire development stack, in a single configuration file, and get it up and running by issuing a single command…
If you tend to use the same frameworks/tools from one project to the next, once you’ve got your basic stack operational, using docker-compose, you can save the configuration file as a template/boilerplate, and when you start a new project, it’s literally just a case of copy and pasting that config file, and you’ve got a fresh and full blown development environment, up and running…
Even better still, when it comes time to push a project into production, rather than having to start setting up and configuring your production server, you can simply push the same codebase, and launch it by running the same single command, ‘docker-compose up’.
Docker is capable of a lot more than this, but for me, this capability alone was a game changer.
You can quite safely ignore it's other capabilities, in the short term, and learn about them, as and when you need them.
As far as BTCPayServer is concerned, I had a quick look there, and it looks like they maintain a Python library for interacting with BTCPay, from your Python apps.
https://github.com/btcpayserver/btcpay-python
This would drop very nicely into a Django web app, for example, and let you fire off requests to fetch invoices, etc.
There’s a bit more detail here https://docs.btcpayserver.org/CustomIntegration/