Marathon v0.7.0 — running Dockers at scale and more

Sep 25, 2014

Connor Doyle


5 min read

Marathon v0.7.0 is available for download. This new version of Marathon is now the easiest way to deploy Linux workloads at scale, across your entire datacenter or cloud, in both Docker and ordinary containers. It's designed to build on top of the Mesos 0.20.0 release that includes built-in Docker support. On top of Mesos, Marathon is like having a mini-PaaS that is under your full control.
If you want to try this release right away, the fastest method is to simply use our free Mesosphere for Google Cloud Platform tool, which will install and spin up both Mesos 0.20.0 and Marathon 0.7.0 on Google Compute Engine with just a few clicks.
If you prefer to roll-your-own, it's easy to get started because Mesosphere provides Linux packages for both Mesos and Marathon. Visit our downloads page for details on how to set up our repository.
You can also get the Marathon 0.7.0 distribution by itself at
Important: Some features of Marathon 0.7.0 require Mesos 0.20.0+. If you are running an earlier version of Mesos, you should upgrade Mesos first. Furthermore, it is not recommended to deploy Marathon 0.6.x and earlier with Mesos 0.20.0. 
Deploying Docker Containers at Scale
Marathon 0.7.0, when used with Mesos 0.20.0, supports Docker containers directly via a native containerizer. We believe Marathon is the most stable and robust way to run and manage Docker containers at any scale, and especially at large scale. Mesos now also allows multiple containerizers to be configured, which means that the same cluster can host Docker and non-Docker containers. Prior to Marathon 0.7.0, it was necessary to use a custom containerizer called Deimos and you had to use that containerizer for all workloads, which made it an all-or-nothing choice. Now that limitation no longer exists.
[highlight code='bash']
# Docker Containerization with Marathon 0.7.0, Mesos 0.20.0curl -X POST -H "Accept: application/json" -H "Content-Type: application/json"   localhost:8080/v2/apps -d '{  "container": {    "type": "DOCKER",    "docker": {      "image": "libmesos/ubuntu"    },    "volumes" : [      {        "containerPath": "/etc/a",        "hostPath": "/var/data/a",        "mode": "RO"      },      {        "containerPath": "/etc/b",        "hostPath": "/var/data/b",        "mode": "RW"      }    ]  },  "id": "ubuntu",  "instances": "1",  "cpus": "0.5",  "mem": "512",  "uris": [],  "cmd": "while sleep 10; do date -u +%T; done"}'
See the Marathon 0.7.0 documentation for more details on how to run long-running Docker tasks.
Zero Downtime and Rolling Deploys
Another major enhancement in Marathon 0.7.0 is the ability to perform zero-downtime deployments of application versions. Coupled with task health checks, this means that operators can safely perform rolling restarts or upgrades across thousands of app instances, all while ensuring that there are always enough healthy instances to serve live traffic.
More Tools for Scale
Task health checks were introduced in Marathon 0.5.0; now this feature has been extended to make use of the new executor health check program available in Mesos as of version 0.20.0. This has the advantage that health checks can be executed on each cluster node instead of from a single (Marathon scheduler) process.
Note: To use this feature it's necessary to set the `--executor_health_checks` flag when starting Marathon.
[highlight code='bash']
curl -X POST -H "Accept: application/json" -H "Content-Type: application/json"   localhost:8080/v2/apps -d '{  ...  "healthChecks": [    {      "protocol": "COMMAND",      "command": { "value": "curl -f -X GET http://$HOST:$PORT0/health" },      "gracePeriodSeconds": 30,      "intervalSeconds": 30,      "timeoutSeconds": 30,      "maxConsecutiveFailures": 3    }  ]}'
The Artifact Store provides a way to stage application resources into a highly available data store for better performance in the Mesos fetcher. Initially only HDFS is supported. This allows you to deploy application artifacts onto thousands of nodes without taking down a fileserver, a la Facebook.
Everything That's New
There are simply too many new features in Marathon to give them all in-depth treatment in this post, but we will summarize them for you here.
(You can also view the diff of Marathon 0.6.1 to 0.7.0 for detailed changes.)
New Features
  • Support for Docker containers running natively on Mesos 0.20.0.
  • Hierarchical namespaces for organizing applications.
  • Automatic rolling deployment of application versions.
  • Support for scalable task health checks conducted by the Mesos executor.
  • Support for caching artifacts in HDFS for more scalable distribution of application packages and configuration in very large clusters.
  • Vastly improved documentation.
Major Changes
  • Requires Mesos 0.20.0
  • App IDs may now be a path consisting of LDH domain names separated by forward slashes.
  • taskRateLimit was replaced by backoffSeconds and backoffFactor.
  • All app updates now create a deployment.
Bug Fixes
Marathon 0.7.0 features a number of stability improvements and bug fixes. Check the full list of closed issues for details.
We'd like to extend a huge "thank you" to everyone who helped with testing and writing docs leading up to this release.
Stay tuned for the next Marathon release announcement, which will add Docker bridged networking support and some fresh UI updates!

Ready to get started?