<p>I'm looking for some pros and cons of whether to go with Marathon and Chronos, Docker Swarm or Kubernetes when running Docker containers on DC/OS. </p>

<p>For example, when is it better to use Marathon/Chronos than Kubernetes and vice versa? </p>

<p>Right now I'm mostly into experimenting but hopefully we'll start using one of these services in production after the summer. This may disqualify Docker Swarm since I'm not sure if it'll be production ready by then. </p>

<p>What I like about Docker Swarm is that it's essentially just "Docker commands" and you don't have to learn something completely new. We're already using <code>docker-compose</code> and that will work out of the box with Docker Swarm (at least in theory) so that would be a big plus. My main concern with Docker Swarm is if it'll cover all use cases required to run a system in production.</p>

<p>I'll try to break down the unique aspects of each container orchestration framework on Mesos.</p>

<p>Use <a href="https://github.com/docker/swarm/">Docker Swarm</a> if:</p>

<ul>
<li>You want to use the familiar Docker API to launch Docker containers on Mesos.</li>
<li>Swarm may eventually provide an API to talk to Kubernetes (even K8s-Mesos) too.</li>
<li>See: <a href="http://www.techrepublic.com/article/docker-and-mesos-like-peanut-butter-and-jelly/">http://www.techrepublic.com/article/docker-and-mesos-like-peanut-butter-and-jelly/</a></li>
</ul>

<p>Use <a href="https://github.com/mesosphere/kubernetes-mesos">Kubernetes-Mesos</a> if:</p>

<ul>
<li>You want to launch K8s Pods, which are groups of containers co-scheduled and co-located together, sharing resources.</li>
<li>You want to launch a service alongside one or more sidekick containers (e.g. log archiver, metrics monitor) that live next to the parent container.</li>
<li>You want to use the K8s label-based service-discovery, load-balancing, and replication control.</li>
<li>See <a href="http://kubernetesio.blogspot.com/2015/04/kubernetes-and-mesosphere-dcos.html">http://kubernetesio.blogspot.com/2015/04/kubernetes-and-mesosphere-dcos.html</a></li>
</ul>

<p>Use <a href="https://mesosphere.github.io/marathon/">Marathon</a> if:</p>

<ul>
<li>You want to launch Docker or non-Docker long-running apps/services.</li>
<li>You want to use Mesos attributes for constraint-based scheduling.</li>
<li>You want to use Application Groups and Dependencies to launch, scale, or upgrade related services.</li>
<li>You want to use health checks to automatically restart unhealthy services or rollback unhealthy deployments/upgrades.</li>
<li>You want to integrate HAProxy or Consul for service discovery.</li>
<li>You want to launch and monitor apps through a web UI or REST API.</li>
<li>You want to use a framework built from the start with Mesos in mind.</li>
</ul>

<p>Use <a href="https://github.com/mesos/chronos">Chronos</a> if:</p>

<ul>
<li>You want to launch Docker or non-Docker tasks that are expected to exit.</li>
<li>You want to schedule a task to run at a specific time/schedule (a la <code>cron</code>).</li>
<li>You want to schedule a DAG workflow of dependent tasks.</li>
<li>You want to launch and monitor jobs through a web UI or REST API.</li>
<li>You want to use a framework built from the start with Mesos in mind.</li>
</ul>
