There are a few technical and philosophical reasons we don't support compose out of the box:
- The build process does not lend itself well to a cleanup step. Since images are overwritten, users end up having old images lying around.
- There is no zero-downtime scheduling for compose containers. You either replace them all at once - via `up` - and suffer the downtime, or namespace them by specifying a `--project-name` command arg and then doing some tricks when updating routing.
- Many folks want docker-compose to specify the entire environment, including datastores. If you change the project name, compose links don't work anymore since you're essentially creating a new stack. If you use the same project name, we don't have any guarantees on where data lives, since many folks use volumes for that stuff (and volumes may not be backed by filesystems).
- The compose yml format exposes lots of stuff that may not be desirable to expose on a shared instance in the name of security. For users that share a host with others in a semi-untrusted setup, I'd hate for their first step to be "disable the compose builder and scheduler plugins".
Note that you can deploy compose to ACI and ECS, both of which have a bunch of caveats around usage[1][2]. The only Kubernetes support I'm aware of for compose is Kompose[3], which transforms the file to something kubernetes is aware of for application.I think overall the limitation around zero-downtime deploys in compose makes support in Dokku less interesting. We have support for basically everything you'd want otherwise. Our current alternative is to use dokkupose[4] to transform a compose file to the corresponding Dokku commands.
If folks are comfortable with the downtime and any other limitations, it might be nice to have a simple docker-compose plugin for building/scheduling, but I feel as though it wouldn't be worth it (maybe its just me).
- [1] https://docs.docker.com/cloud/aci-compose-features/
- [2] https://docs.docker.com/cloud/ecs-compose-features/
- [3] https://kompose.io/
- [4] https://dokkupose.netlify.app/