A genuine depiction of “Plague Sapiens”: a distinct form of human evolution, entirely erased from memory until it resurfaced from the infernal depths of space.
This could be the I/O overhead caused by docker while using NAT networking: https://stackoverflow.com/questions/21889053/what-is-the-runtime-performance-cost-of-a-docker-container#26149994
Whats your setup? Stuff dockerized? Looks like routing/iptables are set incorrectly (depending on your setup).
But my solution would be using a local DNS VPN like personalDNSfilter, exposing your services over the VPS to the net and connecting over https to them. For local access at home you can use split-brain-dns (hope thats the correct word [example.net = 8.8.8.8, at home it resolutes to 192.168.x.y]). With that you can just walk around and use every service with the best latency and bandwidth, without manually deactivating the VPN.
For a small pocket and low power consumption but incredible performance I would recommend the Odroid M1. Add a cheap nvme drive for the os (I prefer debian) and a 2,5" hdd. On top of debian you can install OMV for a webui based linux home server control. DietPi is nice for beginners too. And like other ppl already said, you can use docker/podman for running your software.
Oh and don’t forget the 3-2-1 backup rule. 3 Backups, 2 different media types (ssd, hdd, usb stick, cloud, …) and 1 offsite backup (cloud or hdd at your friend’s house).