We used Mesos to orchestrate and deploy Docker containers for our production web applications. Each app, backend or frontend, had its own Docker container and was automatically deployed using Circle CI. Mesos would pull from Docker Hub when a new version was released and restart the app with the new version.
- Mesos let us orchestrate containers on our own hardware using our own DNS. We switched from Docker Cloud, which caused several major outages for us.
- Unreliable deployments that would fail for no good reason. Sometimes our Docker container would be "restarting" forever because Mesos thought it didn't have enough resources to start the container.
- Impossibly slow UI. Built in React under the hood with a lot of bloatware backed in, so loading the Mesos UI on a slow internet connection was painful.
- No real logging solution - it would stream "console.log()" output to the UI, but searching for logs wasn't really possible without downloading a huge file.
- No built-in support for redeploying containers from a CI. We had to create a service whose whole job was to expose an HTTP endpoint that restarted a container, and then made Circle CI ping the endpoint whenever we wanted to redeploy.
There's really no reason to ever use Mesos. We switched over to Kubernetes and it's been a breath of fresh air - better CD support, easy CLI for browsing logs, no mysterious dangling redeploys. If you're looking for a tool to manage a fleet of Docker containers on VMs, Kubernetes beats Mesos by a wide margin.