You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by gi...@apache.org on 2018/11/19 20:56:55 UTC

[mesos-site] branch asf-site updated: Updated the website built from mesos SHA: 05a7caf.

This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/mesos-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new a2d797c  Updated the website built from mesos SHA: 05a7caf.
a2d797c is described below

commit a2d797cf5df2d80db4285a7eadcaa680d53e4804
Author: jenkins <bu...@apache.org>
AuthorDate: Mon Nov 19 20:56:53 2018 +0000

    Updated the website built from mesos SHA: 05a7caf.
---
 content/blog/feed.xml              | 166 +++++++++++++++++-
 content/blog/index.html            |   4 +
 content/blog/mesos-mini/index.html | 348 +++++++++++++++++++++++++++++++++++++
 content/sitemap.xml                |   4 +
 4 files changed, 521 insertions(+), 1 deletion(-)

diff --git a/content/blog/feed.xml b/content/blog/feed.xml
index 020dea1..ed6bb8b 100644
--- a/content/blog/feed.xml
+++ b/content/blog/feed.xml
@@ -4,7 +4,171 @@
   <id>http://mesos.apache.org/blog</id>
   <link href="http://mesos.apache.org/blog" />
   <link href="http://mesos.apache.org/blog/feed.xml" rel="self"/>
-  <updated>2018-10-08T00:00:00+00:00</updated>
+  <updated>2018-11-19T00:00:00+00:00</updated>
+  <entry>
+    <id>http://mesos.apache.org/blog/mesos-mini/</id>
+    <link href="/blog/mesos-mini/" />
+    <title>
+      Run Mesos Locally with Mesos Mini Docker Container
+    </title>
+    <updated>2018-11-19T00:00:00+00:00</updated>
+    <author>
+      <name>Jie Yu</name>
+    </author>
+    <content type="html">
+      &lt;p&gt;&lt;a href=&quot;https://hub.docker.com/r/mesos/mesos-mini/&quot;&gt;Mesos Mini&lt;/a&gt; is a Docker image maintained by the Apache Mesos community.
+It allows you to test Mesos locally with a simple &lt;code&gt;docker run&lt;/code&gt;.&lt;/p&gt;
+
+&lt;h1&gt;Why Mesos Mini&lt;/h1&gt;
+
+&lt;p&gt;Being able to spin up a local Mesos cluster in Docker can greatly simplify the work in the following scenarios:&lt;/p&gt;
+
+&lt;ul&gt;
+&lt;li&gt;&lt;em&gt;Demo&lt;/em&gt;: Imagine doing a live demo with Mesos in a conference with unstable Wifi.&lt;/li&gt;
+&lt;li&gt;&lt;em&gt;Framework development&lt;/em&gt;: Write end-to-end integration tests for your framework with a local Mesos cluster in a Docker container.
+This can be easily automated in your test suite.&lt;/li&gt;
+&lt;li&gt;&lt;em&gt;Test new Mesos features&lt;/em&gt;: Test new features from Mesos that haven&amp;rsquo;t been released yet.
+You might be able to do that by building Mesos from the source code, but most framework developers do not know how to do it, and it is slow.&lt;/li&gt;
+&lt;/ul&gt;
+
+
+&lt;p&gt;The idea is similar to &lt;a href=&quot;https://github.com/kubernetes/minikube&quot;&gt;minikube&lt;/a&gt; or &lt;a href=&quot;https://github.com/ContainerSolutions/minimesos&quot;&gt;minimesos&lt;/a&gt;.&lt;/p&gt;
+
+&lt;p&gt;However, &lt;a href=&quot;https://github.com/ContainerSolutions/minimesos&quot;&gt;minimesos&lt;/a&gt; is no longer maintained.
+As a result, Apache Mesos community decides to maintain a solution in Mesos repository to simplify CI integrations.&lt;/p&gt;
+
+&lt;h1&gt;Get started&lt;/h1&gt;
+
+&lt;p&gt;Make sure &lt;a href=&quot;https://docs.docker.com/install/&quot;&gt;Docker&lt;/a&gt; is installed.
+We have tested on both Linux and MacOS.&lt;/p&gt;
+
+&lt;p&gt;To create a local Mesos cluster, simply do a &lt;code&gt;docker run&lt;/code&gt;:&lt;/p&gt;
+
+&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;$ docker run --rm --privileged -p 5050:5050 -p 5051:5051 -p 8080:8080 mesos/mesos-mini
+&lt;/code&gt;&lt;/pre&gt;
+
+&lt;p&gt;It will launch one Mesos master, one Mesos agent, and one example framework (Marathon) in the Docker container.&lt;/p&gt;
+
+&lt;p&gt;You should be able to access Mesos master UI at &lt;code&gt;http://localhost:5050&lt;/code&gt;.
+Similarly, you can access Mesos agent at &lt;code&gt;http://localhost:5051&lt;/code&gt;.
+Marathon UI can be accessed at &lt;code&gt;http://localhost:8080&lt;/code&gt;.&lt;/p&gt;
+
+&lt;p&gt;You should be able to launch containers in the local Mesos cluster using Marathon like the following:&lt;/p&gt;
+
+&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;$ cat app.json
+{
+  &quot;id&quot;: &quot;test&quot;,
+  &quot;cmd&quot;: &quot;sleep 1000&quot;,
+  &quot;cpus&quot;: 1,
+  &quot;mem&quot;: 128,
+  &quot;disk&quot;: 0,
+  &quot;instances&quot;: 1,
+  &quot;container&quot;: {
+    &quot;docker&quot;: {
+      &quot;image&quot;: &quot;alpine&quot;
+    },
+    &quot;type&quot;: &quot;DOCKER&quot;
+  },
+  &quot;networks&quot;: [
+    {
+      &quot;mode&quot;: &quot;host&quot;
+    }
+  ]
+}
+$ curl -X POST -d @app.json -H &quot;Content-type: application/json&quot; http://localhost:8080/v2/apps
+&lt;/code&gt;&lt;/pre&gt;
+
+&lt;p&gt;To stop the local Mesos cluster, please use &lt;code&gt;docker stop&lt;/code&gt;.
+All artifacts associated with the local Mesos cluster will be cleaned up when the Docker container stops.&lt;/p&gt;
+
+&lt;p&gt;The following Docker image tags are maintained:&lt;/p&gt;
+
+&lt;ul&gt;
+&lt;li&gt;&lt;code&gt;master&lt;/code&gt;: The latest master branch HEAD.&lt;/li&gt;
+&lt;li&gt;&lt;code&gt;&amp;lt;RELEASE_BRANCH&amp;gt;&lt;/code&gt;: The latest release branch HEAD (e.g., &lt;code&gt;1.7.x&lt;/code&gt;).&lt;/li&gt;
+&lt;li&gt;&lt;code&gt;master-&amp;lt;DATE&amp;gt;&lt;/code&gt;: The snapshot builds for master branch (e.g., &lt;code&gt;master-2018-11-19&lt;/code&gt;).&lt;/li&gt;
+&lt;li&gt;&lt;code&gt;&amp;lt;RELEASE_BRANCH&amp;gt;-&amp;lt;DATE&amp;gt;&lt;/code&gt;: The snapshot builds for release branch (e.g., &lt;code&gt;1.7.x-2018-11-19&lt;/code&gt;).&lt;/li&gt;
+&lt;/ul&gt;
+
+
+&lt;p&gt;Note that there is no support for release branches earlier than &lt;code&gt;1.7.x&lt;/code&gt;.
+All future release branches will be supported.&lt;/p&gt;
+
+&lt;h1&gt;How is it done?&lt;/h1&gt;
+
+&lt;h2&gt;Manage multiple services&lt;/h2&gt;
+
+&lt;p&gt;We use &lt;code&gt;systemd&lt;/code&gt; to manage multiple daemons in the Mesos Mini Docker container.
+As a result, you can use the following command to restart the Mesos master in the Mesos Mini Docker container:&lt;/p&gt;
+
+&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;$ docker exec &amp;lt;CONTAINER_ID&amp;gt; systemctl restart mesos-master
+&lt;/code&gt;&lt;/pre&gt;
+
+&lt;p&gt;Similarly, you can use that to restart other services (e.g., Mesos agent or Marathon).
+This is very useful for those end-to-end integration tests that want to simulate Mesos master failover.&lt;/p&gt;
+
+&lt;h2&gt;Docker Containerizer&lt;/h2&gt;
+
+&lt;p&gt;One of the goals of Mesos Mini is to mimic production settings as much as possible.&lt;/p&gt;
+
+&lt;p&gt;To allow frameworks to launch Docker containers, we embed a Docker Daemon (i.e., Docker in Docker) in the Mesos Mini Docker container.
+For instance, to view all Docker containers in the Mesos cluster, use the following command on your host:&lt;/p&gt;
+
+&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;$ docker exec &amp;lt;CONTAINER_ID&amp;gt; docker ps
+&lt;/code&gt;&lt;/pre&gt;
+
+&lt;p&gt;The cgroup root for the embedded Docker Daemon has been configured so that the cgroups for the nested Docker containers are properly nested within the Mesos Mini Docker container.
+This ensures that no cgroups traces will be left in the system when the Mesos Mini Docker container finishes.&lt;/p&gt;
+
+&lt;h2&gt;Mesos Containerizer (UCR)&lt;/h2&gt;
+
+&lt;p&gt;For Mesos Containerizer (UCR), we turn on most of the &lt;a href=&quot;https://github.com/apache/mesos/docs/mesos-containerizer.md&quot;&gt;isolators&lt;/a&gt; that are typically turned on in production environments.
+Similar to Docker daemon, we need to do a few tweaking on cgroups in Mesos Mini Docker container to make sure it does not leave any traces when Mesos Mini Docker container terminates.&lt;/p&gt;
+
+&lt;p&gt;For each cgroup subsystem, Docker does a bind mount from the current cgroup to the root of the cgroup subsystem.
+For instance:&lt;/p&gt;
+
+&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;/sys/fs/cgroup/memory/docker/&amp;lt;cid&amp;gt; -&amp;gt; /sys/fs/cgroup/memory
+&lt;/code&gt;&lt;/pre&gt;
+
+&lt;p&gt;This will confuse Mesos agent and UCR because it relies on proc file &lt;code&gt;/proc/&amp;lt;pid&amp;gt;/cgroup&lt;/code&gt; to determine the cgroups of a given process, and this proc file is not affected by the bind mount of the cgroups.&lt;/p&gt;
+
+&lt;p&gt;To workaround that, we perform the following steps for each cgroup subsystems when bootstrapping the Mesos Mini Docker container to recreates the cgroups layout as if it were on the host.&lt;/p&gt;
+
+&lt;pre&gt;&lt;code class=&quot;bash&quot;&gt;$ mkdir -p /sys/fs/cgroup/memory/docker/&amp;lt;cid&amp;gt;
+$ mount --bind /sys/fs/cgroup/memory /sys/fs/cgroup/memory/docker/&amp;lt;cid&amp;gt;
+&lt;/code&gt;&lt;/pre&gt;
+
+&lt;p&gt;And then set Mesos agent &lt;code&gt;--cgroups_root&lt;/code&gt; flag to &lt;code&gt;docker/&amp;lt;cid&amp;gt;&lt;/code&gt;.&lt;/p&gt;
+
+&lt;h1&gt;Maintenance&lt;/h1&gt;
+
+&lt;p&gt;The &lt;a href=&quot;https://github.com/apache/mesos/tree/master/support/mesos-mini&quot;&gt;build scripts&lt;/a&gt; for Mesos Mini is hosted in Mesos repository.
+The &lt;a href=&quot;https://builds.apache.org/view/M-R/view/Mesos/job/Docker/job/Mini/&quot;&gt;Mesos Docker Mini Jenkins CI&lt;/a&gt; has been setup to automatically push daily snapshot builds to Docker hub for supported release branches as well as the master branch.&lt;/p&gt;
+
+&lt;p&gt;For any bug fix or new features, please follow the &lt;a href=&quot;http://mesos.apache.org/community/#contribute-a-patch&quot;&gt;Apache Mesos contribution guide&lt;/a&gt;.&lt;/p&gt;
+
+&lt;h2&gt;Mesos CentOS Docker Image&lt;/h2&gt;
+
+&lt;p&gt;In some scenarios, some users might prefer having a Docker image that only has Mesos installed.
+To enable that, we also built a &lt;code&gt;mesos/mesos-centos&lt;/code&gt; Docker image.
+The tags are similar to those of Mesos Mini.
+In fact, &lt;code&gt;mesos/mesos-mini&lt;/code&gt; uses &lt;code&gt;mesos/mesos-centos&lt;/code&gt; as its base image.&lt;/p&gt;
+
+&lt;p&gt;The &lt;a href=&quot;https://github.com/apache/mesos/tree/master/support/packaging/centos/build-docker-centos.sh&quot;&gt;build scripts&lt;/a&gt; for Mesos CentOS Docker image is also hosted in Mesos repository.
+The &lt;a href=&quot;https://builds.apache.org/view/M-R/view/Mesos/job/Docker/job/CentOS/&quot;&gt;Mesos Docker CentOS Jenkins CI&lt;/a&gt; has been setup to automatically push daily snapshot builds to Docker hub for supported release branches as well as the master branch.&lt;/p&gt;
+
+&lt;h1&gt;Current limitations&lt;/h1&gt;
+
+&lt;ul&gt;
+&lt;li&gt;Only one Mesos agent can be launched in the Mesos Mini Docker container.&lt;/li&gt;
+&lt;li&gt;Marathon uses in-memory storage instead of ZK.&lt;/li&gt;
+&lt;li&gt;SSL is not enabled.&lt;/li&gt;
+&lt;/ul&gt;
+
+
+	</content>
+  </entry>
   <entry>
     <id>http://mesos.apache.org/blog/mesos-1-7-0-performance-improvements/</id>
     <link href="/blog/mesos-1-7-0-performance-improvements/" />
diff --git a/content/blog/index.html b/content/blog/index.html
index 820eb45..0a1c86a 100644
--- a/content/blog/index.html
+++ b/content/blog/index.html
@@ -102,6 +102,10 @@
   </div>
   <div class="col-md-9">
       <article>
+        <h2><a href="/blog/mesos-mini/">Run Mesos Locally with Mesos Mini Docker Container</a></h2>
+      <p><em>Posted by Jie Yu, November 19, 2018</em></p>
+      </article>
+      <article>
         <h2><a href="/blog/mesos-1-7-0-performance-improvements/">Performance Improvements in Mesos 1.7.0</a></h2>
       <p><em>Posted by Benjamin Mahler, October  8, 2018</em></p>
       </article>
diff --git a/content/blog/mesos-mini/index.html b/content/blog/mesos-mini/index.html
new file mode 100644
index 0000000..96175d1
--- /dev/null
+++ b/content/blog/mesos-mini/index.html
@@ -0,0 +1,348 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title>Run Mesos Locally with Mesos Mini Docker Container</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+    <meta property="og:locale" content="en_US"/>
+    <meta property="og:type" content="website"/>
+    <meta property="og:title" content="Apache Mesos"/>
+    <meta property="og:site_name" content="Apache Mesos"/>
+    <meta property="og:url" content="http://mesos.apache.org/"/>
+    <meta property="og:image" content="http://mesos.apache.org/assets/img/mesos_logo_fb_preview.png"/>
+    <meta property="og:description"
+          content="Apache Mesos abstracts resources away from machines,
+                   enabling fault-tolerant and elastic distributed systems
+                   to easily be built and run effectively."/>
+
+    <meta name="twitter:card" content="summary"/>
+    <meta name="twitter:site" content="@ApacheMesos"/>
+    <meta name="twitter:title" content="Apache Mesos"/>
+    <meta name="twitter:image" content="http://mesos.apache.org/assets/img/mesos_logo_fb_preview.png"/>
+    <meta name="twitter:description"
+          content="Apache Mesos abstracts resources away from machines,
+                   enabling fault-tolerant and elastic distributed systems
+                   to easily be built and run effectively."/>
+
+    <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
+    <link rel="alternate" type="application/atom+xml" title="Apache Mesos Blog" href="/blog/feed.xml">
+    <link href="../../assets/css/main.css" rel="stylesheet" />
+
+
+    <!-- Google Analytics Magic -->
+    <script type="text/javascript">
+    var _gaq = _gaq || [];
+    _gaq.push(['_setAccount', 'UA-20226872-1']);
+    _gaq.push(['_setDomainName', 'apache.org']);
+    _gaq.push(['_trackPageview']);
+
+    (function() {
+      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+    })();
+    </script>
+  </head>
+  <body>
+    <!-- magical breadcrumbs -->
+    <div class="topnav">
+      <div class="container">
+        <ul class="breadcrumb">
+          <li>
+            <div class="dropdown">
+              <a data-toggle="dropdown" href="#">Apache Software Foundation <span class="caret"></span></a>
+              <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
+                <li><a href="http://www.apache.org">Apache Homepage</a></li>
+                <li><a href="http://www.apache.org/licenses/">License</a></li>
+                <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+                <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+                <li><a href="http://www.apache.org/security/">Security</a></li>
+              </ul>
+            </div>
+          </li>
+
+          <li><a href="http://mesos.apache.org">Apache Mesos</a></li>
+          <li><a href="/blog/">Blog</a></li>
+        </ul><!-- /.breadcrumb -->
+      </div><!-- /.container -->
+    </div><!-- /.topnav -->
+
+    <!-- navbar excitement -->
+<div class="navbar navbar-default navbar-static-top" role="navigation">
+  <div class="container">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#mesos-menu" aria-expanded="false">
+      <span class="sr-only">Toggle navigation</span>
+      <span class="icon-bar"></span>
+      <span class="icon-bar"></span>
+      <span class="icon-bar"></span>
+      </button>
+      <a class="navbar-brand" href="/"><img src="/assets/img/mesos_logo.png" alt="Apache Mesos logo"/></a>
+    </div><!-- /.navbar-header -->
+
+    <div class="navbar-collapse collapse" id="mesos-menu">
+      <ul class="nav navbar-nav navbar-right">
+        <li><a href="/getting-started/">Getting Started</a></li>
+        <li><a href="/blog/">Blog</a></li>
+        <li><a href="/documentation/latest/">Documentation</a></li>
+        <li><a href="/downloads/">Downloads</a></li>
+        <li><a href="/community/">Community</a></li>
+      </ul>
+    </div><!-- /#mesos-menu -->
+  </div><!-- /.container -->
+</div><!-- /.navbar -->
+
+<div class="content">
+  <div class="container">
+    <div class="row">
+
+  <div class="col-md-3">
+    <div class="meta">
+      <span class="author">
+        <span class="author_contact">
+          <p><strong>Jie Yu</strong></p>
+            <p><a href="http://twitter.com/jie_yu">@jie_yu</a></p>
+        </span>
+      </span>
+      <p><em>Posted November 19, 2018</em></p>
+    </div>
+
+    <div class="share">
+      <span class="social-share-button"><a href="https://twitter.com/share" class="twitter-share-button" data-via="apachemesos">Tweet</a></span>
+
+      <span><script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script></span>
+
+      <span><div class="g-plusone" data-size="medium"></div></span>
+
+      <!-- Place this tag after the last +1 button tag. -->
+      <script type="text/javascript">
+        (function() {
+        var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
+        po.src = 'https://apis.google.com/js/plusone.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
+        })();
+      </script>
+
+      <script src="//platform.linkedin.com/in.js" type="text/javascript">
+       lang: en_US
+      </script>
+      <script type="IN/Share" data-counter="right"></script>
+    </div>
+  </div>
+
+  <div class="post col-md-9">
+    <h1>Run Mesos Locally with Mesos Mini Docker Container</h1>
+
+    <p><a href="https://hub.docker.com/r/mesos/mesos-mini/">Mesos Mini</a> is a Docker image maintained by the Apache Mesos community.
+It allows you to test Mesos locally with a simple <code>docker run</code>.</p>
+
+<h1>Why Mesos Mini</h1>
+
+<p>Being able to spin up a local Mesos cluster in Docker can greatly simplify the work in the following scenarios:</p>
+
+<ul>
+<li><em>Demo</em>: Imagine doing a live demo with Mesos in a conference with unstable Wifi.</li>
+<li><em>Framework development</em>: Write end-to-end integration tests for your framework with a local Mesos cluster in a Docker container.
+This can be easily automated in your test suite.</li>
+<li><em>Test new Mesos features</em>: Test new features from Mesos that haven&rsquo;t been released yet.
+You might be able to do that by building Mesos from the source code, but most framework developers do not know how to do it, and it is slow.</li>
+</ul>
+
+
+<p>The idea is similar to <a href="https://github.com/kubernetes/minikube">minikube</a> or <a href="https://github.com/ContainerSolutions/minimesos">minimesos</a>.</p>
+
+<p>However, <a href="https://github.com/ContainerSolutions/minimesos">minimesos</a> is no longer maintained.
+As a result, Apache Mesos community decides to maintain a solution in Mesos repository to simplify CI integrations.</p>
+
+<h1>Get started</h1>
+
+<p>Make sure <a href="https://docs.docker.com/install/">Docker</a> is installed.
+We have tested on both Linux and MacOS.</p>
+
+<p>To create a local Mesos cluster, simply do a <code>docker run</code>:</p>
+
+<pre><code class="bash">$ docker run --rm --privileged -p 5050:5050 -p 5051:5051 -p 8080:8080 mesos/mesos-mini
+</code></pre>
+
+<p>It will launch one Mesos master, one Mesos agent, and one example framework (Marathon) in the Docker container.</p>
+
+<p>You should be able to access Mesos master UI at <code>http://localhost:5050</code>.
+Similarly, you can access Mesos agent at <code>http://localhost:5051</code>.
+Marathon UI can be accessed at <code>http://localhost:8080</code>.</p>
+
+<p>You should be able to launch containers in the local Mesos cluster using Marathon like the following:</p>
+
+<pre><code class="bash">$ cat app.json
+{
+  "id": "test",
+  "cmd": "sleep 1000",
+  "cpus": 1,
+  "mem": 128,
+  "disk": 0,
+  "instances": 1,
+  "container": {
+    "docker": {
+      "image": "alpine"
+    },
+    "type": "DOCKER"
+  },
+  "networks": [
+    {
+      "mode": "host"
+    }
+  ]
+}
+$ curl -X POST -d @app.json -H "Content-type: application/json" http://localhost:8080/v2/apps
+</code></pre>
+
+<p>To stop the local Mesos cluster, please use <code>docker stop</code>.
+All artifacts associated with the local Mesos cluster will be cleaned up when the Docker container stops.</p>
+
+<p>The following Docker image tags are maintained:</p>
+
+<ul>
+<li><code>master</code>: The latest master branch HEAD.</li>
+<li><code>&lt;RELEASE_BRANCH&gt;</code>: The latest release branch HEAD (e.g., <code>1.7.x</code>).</li>
+<li><code>master-&lt;DATE&gt;</code>: The snapshot builds for master branch (e.g., <code>master-2018-11-19</code>).</li>
+<li><code>&lt;RELEASE_BRANCH&gt;-&lt;DATE&gt;</code>: The snapshot builds for release branch (e.g., <code>1.7.x-2018-11-19</code>).</li>
+</ul>
+
+
+<p>Note that there is no support for release branches earlier than <code>1.7.x</code>.
+All future release branches will be supported.</p>
+
+<h1>How is it done?</h1>
+
+<h2>Manage multiple services</h2>
+
+<p>We use <code>systemd</code> to manage multiple daemons in the Mesos Mini Docker container.
+As a result, you can use the following command to restart the Mesos master in the Mesos Mini Docker container:</p>
+
+<pre><code class="bash">$ docker exec &lt;CONTAINER_ID&gt; systemctl restart mesos-master
+</code></pre>
+
+<p>Similarly, you can use that to restart other services (e.g., Mesos agent or Marathon).
+This is very useful for those end-to-end integration tests that want to simulate Mesos master failover.</p>
+
+<h2>Docker Containerizer</h2>
+
+<p>One of the goals of Mesos Mini is to mimic production settings as much as possible.</p>
+
+<p>To allow frameworks to launch Docker containers, we embed a Docker Daemon (i.e., Docker in Docker) in the Mesos Mini Docker container.
+For instance, to view all Docker containers in the Mesos cluster, use the following command on your host:</p>
+
+<pre><code class="bash">$ docker exec &lt;CONTAINER_ID&gt; docker ps
+</code></pre>
+
+<p>The cgroup root for the embedded Docker Daemon has been configured so that the cgroups for the nested Docker containers are properly nested within the Mesos Mini Docker container.
+This ensures that no cgroups traces will be left in the system when the Mesos Mini Docker container finishes.</p>
+
+<h2>Mesos Containerizer (UCR)</h2>
+
+<p>For Mesos Containerizer (UCR), we turn on most of the <a href="https://github.com/apache/mesos/docs/mesos-containerizer.md">isolators</a> that are typically turned on in production environments.
+Similar to Docker daemon, we need to do a few tweaking on cgroups in Mesos Mini Docker container to make sure it does not leave any traces when Mesos Mini Docker container terminates.</p>
+
+<p>For each cgroup subsystem, Docker does a bind mount from the current cgroup to the root of the cgroup subsystem.
+For instance:</p>
+
+<pre><code class="bash">/sys/fs/cgroup/memory/docker/&lt;cid&gt; -&gt; /sys/fs/cgroup/memory
+</code></pre>
+
+<p>This will confuse Mesos agent and UCR because it relies on proc file <code>/proc/&lt;pid&gt;/cgroup</code> to determine the cgroups of a given process, and this proc file is not affected by the bind mount of the cgroups.</p>
+
+<p>To workaround that, we perform the following steps for each cgroup subsystems when bootstrapping the Mesos Mini Docker container to recreates the cgroups layout as if it were on the host.</p>
+
+<pre><code class="bash">$ mkdir -p /sys/fs/cgroup/memory/docker/&lt;cid&gt;
+$ mount --bind /sys/fs/cgroup/memory /sys/fs/cgroup/memory/docker/&lt;cid&gt;
+</code></pre>
+
+<p>And then set Mesos agent <code>--cgroups_root</code> flag to <code>docker/&lt;cid&gt;</code>.</p>
+
+<h1>Maintenance</h1>
+
+<p>The <a href="https://github.com/apache/mesos/tree/master/support/mesos-mini">build scripts</a> for Mesos Mini is hosted in Mesos repository.
+The <a href="https://builds.apache.org/view/M-R/view/Mesos/job/Docker/job/Mini/">Mesos Docker Mini Jenkins CI</a> has been setup to automatically push daily snapshot builds to Docker hub for supported release branches as well as the master branch.</p>
+
+<p>For any bug fix or new features, please follow the <a href="http://mesos.apache.org/community/#contribute-a-patch">Apache Mesos contribution guide</a>.</p>
+
+<h2>Mesos CentOS Docker Image</h2>
+
+<p>In some scenarios, some users might prefer having a Docker image that only has Mesos installed.
+To enable that, we also built a <code>mesos/mesos-centos</code> Docker image.
+The tags are similar to those of Mesos Mini.
+In fact, <code>mesos/mesos-mini</code> uses <code>mesos/mesos-centos</code> as its base image.</p>
+
+<p>The <a href="https://github.com/apache/mesos/tree/master/support/packaging/centos/build-docker-centos.sh">build scripts</a> for Mesos CentOS Docker image is also hosted in Mesos repository.
+The <a href="https://builds.apache.org/view/M-R/view/Mesos/job/Docker/job/CentOS/">Mesos Docker CentOS Jenkins CI</a> has been setup to automatically push daily snapshot builds to Docker hub for supported release branches as well as the master branch.</p>
+
+<h1>Current limitations</h1>
+
+<ul>
+<li>Only one Mesos agent can be launched in the Mesos Mini Docker container.</li>
+<li>Marathon uses in-memory storage instead of ZK.</li>
+<li>SSL is not enabled.</li>
+</ul>
+
+
+  </div>
+</div>
+
+  </div><!-- /.container -->
+</div><!-- /.content -->
+
+<hr>
+
+
+
+    <!-- footer -->
+    <div class="footer">
+      <div class="container">
+
+        <div class="col-md-3">
+            <a  href="https://www.apache.org/events/current-event.html">
+              <img src="https://www.apache.org/events/current-event-234x60.png"/>
+            </a>
+        </div>
+
+        <div class="col-md-3 social-blk">
+          <span class="social">
+            <a href="https://twitter.com/ApacheMesos"
+              class="twitter-follow-button"
+              data-show-count="false" data-size="large">Follow @ApacheMesos</a>
+            <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
+            <a href="https://twitter.com/intent/tweet?button_hashtag=mesos"
+              class="twitter-hashtag-button"
+              data-size="large"
+              data-related="ApacheMesos">Tweet #mesos</a>
+            <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
+          </span>
+        </div>
+
+        <div class="col-md-6 trademark">
+          <p>&copy; 2012-2018 <a href="http://apache.org">The Apache Software Foundation</a>.
+            Apache Mesos, the Apache feather logo, and the Apache Mesos project logo are trademarks of The Apache Software Foundation.
+          <p>
+        </div>
+
+      </div><!-- /.container -->
+    </div><!-- /.footer -->
+
+    <!-- JS -->
+    <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
+    <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
+    <script src="//cdnjs.cloudflare.com/ajax/libs/anchor-js/4.1.0/anchor.min.js"></script>
+
+    <!-- Inject anchors for all headings on the page, see https://www.bryanbraun.com/anchorjs. -->
+    <script type="text/javascript">
+    anchors.options = {
+      placement: 'right',
+      ariaLabel: 'Permalink',
+    };
+
+    // The default is to not add anchors to h1, but we have pages with multiple h1 headers,
+    // and we do want to put anchors on those.
+    anchors.add('h1, h2, h3, h4, h5, h6');
+    </script>
+  </body>
+</html>
diff --git a/content/sitemap.xml b/content/sitemap.xml
index b0d2b15..c5d656b 100644
--- a/content/sitemap.xml
+++ b/content/sitemap.xml
@@ -785,6 +785,10 @@
     <lastmod>2018-11-19T00:00:00+00:00</lastmod>
   </url>
   <url>
+    <loc>http://mesos.apache.org/blog/mesos-mini/</loc>
+    <lastmod>2018-11-19T00:00:00+00:00</lastmod>
+  </url>
+  <url>
     <loc>http://mesos.apache.org/blog/mesos-0-21-0-released/</loc>
     <lastmod>2018-11-19T00:00:00+00:00</lastmod>
   </url>