Using Docker to solve these problems is like hiring a construction company to build a birdhouse. Sure, it'll save you the work of having to build the birdhouse yourself, but...it's major overkill, and could end up costing you more effort than other options.
Now, if you were running a complex suite of mircoservices, then there might be a good reason to use containers. But containers are like JavaScript; you shouldn't jump for them before you've weighed your other options.
Docker isn't Kubernetes -- it's not that complicated.
If you use a distro like Debian you shouldn't be worried about breaking changes, especially if you're subscribed to updates/relnotes for the critical parts of your stack (e.g., an announcements mailing list).
Those are good practices to have regardless of your platform.
It is far more than a "layer on top of cgroups".
If you believe "Dockerfiles are basically shell scripts", you could try using shell scripts.
Docker is like the static typing of deployments. It may seem a bit over the top at first, but it will really make your life easier.
That is, yes, it will break often in small ways. However, most of the breaks will be from version upgrades or machine changes. The sooner you find those, the better.
I use these three both remote and locally, and start all of these using a simple shell script.
EDIT: Just to be clear, I am referring to the fact that Docker on Mac and Windows runs inside a Linux VM.