My docker files, configs, and volumes are all kept in a structure like:
/srv
- /docker
- - /syncthing
- - - /compose.yml
- - - /sync-volume
- - /traefik
- - - /compose.yml
[...]
I just backup /srv/docker, but I black list some subfolders for things like databases for which regular dumps are created or something. Currently the compressed / deduplicated repos consume ~350GB.
I use borgmatic because you do 1 full backup and thereafter everything is incremental, so minimal bandwidth.
I keep one backup repo on the server itself in /srv/backup - yes this will be prone to failure of that server but it's super handy to be able to restore from a local repo if you just mess up a configuration or version upgrade or something.
I keep two other backup repos in two other physical locations, and one repo air gapped.
For example I rent a server from OVH in a Sydney data centre, there's one repo in /srv/backup on that server, one on OVH's storage service, one kept on my home server, and one on a removable drive I update periodically.
All repo's are encrypted except for the air gapped one. That one has instructions intended for someone to use if I die or am incapacitated. So it has my master password for my password database, ssh keys, everything. We have a physical safe at home so that's where that lives.