I run docker-compose inside supervisord. Surprisingly it works great, they play well together and I highly recommend it for managing multiple compose projects per machine.
[program:some-docker-project]
command=docker-compose up
directory=/opt/some-docker-project
...
[program:some-other-docker-project]
command=docker-compose up
directory=/opt/some-other-docker-project
...
This style of setup has served many millions of visitors across dozens of projects in production at our company over the last ~3 years. It's like a poor-mans kubernetes, it handles autorestarting failed projects, we handle ingress with cloudflare argo tunnels in docker, and deployments are easy (just git pull && supervisorctl restart all).
I'm more at the level of one Docker-compose per VM, and I've got it loading with some os too. Service or similar. But there are at least a few problems with that.
1) Want Ci where push to github builds the image and deploys.
2) Binpacking time. We're at the point where that's an issue
3) Host machines -- There's too much on them and we need to standardize and streamline.
For one or two services on a machine, it's pretty good. Past that... not so much.