<!DOCTYPE html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js" xmlns="http://www.w3.org/1999/html"> <!--<![endif]-->
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>Docker - the Linux container runtime</title>

    <meta name="description" content="Docker encapsulates heterogeneous payloads in standard containers">
    <meta name="viewport" content="width=device-width">

    <!-- twitter bootstrap -->
    <link rel="stylesheet" href="_static/css/bootstrap.min.css">
    <link rel="stylesheet" href="_static/css/bootstrap-responsive.min.css">

    <!-- main style file -->
    <link rel="stylesheet" href="_static/css/main.css">

    <!-- vendor scripts -->
    <script src="_static/js/vendor/jquery-1.9.1.min.js" type="text/javascript" ></script>
    <script src="_static/js/vendor/modernizr-2.6.2-respond-1.1.0.min.js" type="text/javascript" ></script>

</head>


<body>

<div class="navbar navbar-fixed-top">
    <div class="navbar-dotcloud">
        <div class="container" style="text-align: center;">

            <div class="pull-right" >
                <ul class="nav">
                    <li class="active"><a href="./">Introduction</a></li>
                    <li ><a href="gettingstarted/">Getting started</a></li>
                    <li class=""><a href="http://docs.docker.io/en/latest/concepts/containers/">Documentation</a></li>
                </ul>

                <div class="social links" style="float: right; margin-top: 14px; margin-left: 12px">
                    <a class="twitter" href="http://twitter.com/getdocker">Twitter</a>
                    <a class="github" href="https://github.com/dotcloud/docker/">GitHub</a>
                </div>
            </div>
        </div>
    </div>
</div>


<div class="container">
    <div class="row">
        <div class="text-center">
            <img src="_static/img/docker-letters-logo.gif">
        </div>
    </div>
</div>

<div class="container">
    <div class="row">

        <div class="span12">
            <section class="contentblock header">

                <div class="span6" style="margin:10px 0px 0px 30px; float: right; ">
                    <div class="js-video" >
                        <iframe width="640" height="360" src="http://www.youtube.com/embed/wW9CAH9nSLs?feature=player_detailpage&rel=0&modestbranding=1&start=11" frameborder="0" allowfullscreen></iframe>
                    </div>
                </div>

                <div style="text-align: center; padding: 50px 30px 50px 30px;">
		    <h1>Docker</h1>
		    <h2>The Linux container runtime</h2>
                </div>

                <div style="display: block; text-align: center; padding: 10px 30px 50px 30px;">
			<p>
			Docker complements LXC with a high-level API which operates at the process level.
			It runs unix processes with strong guarantees of isolation and repeatability across servers.
			</p>

			<p>
			Docker is a great building block for automating distributed systems: large-scale web deployments, database clusters, continuous deployment systems, private PaaS, service-oriented architectures, etc.
			</p>
                </div>


                <div style="display: block; text-align: center;">
                    <a class="btn btn-custom btn-large" href="gettingstarted/">Let's get started</a>
                </div>



                <br style="clear: both"/>
            </section>
        </div>
    </div>
</div>

<div class="container">
    <div class="row">

        <div class="span3">
            <section class="contentblock">
                <h4>Heterogeneous payloads</h4>
                <p>Any combination of binaries, libraries, configuration files, scripts, virtualenvs, jars, gems, tarballs, you name it. No more juggling between domain-specific tools. Docker can deploy and run them all.</p>
            </section>
        </div>
        <div class="span3">
            <section class="contentblock">
                <h4>Any server</h4>
                <p>Docker can run on any x64 machine with a modern linux kernel - whether it's a laptop, a bare metal server or a VM. This makes it perfect for multi-cloud deployments.</p>
            </section>
        </div>
        <div class="span3">
            <section class="contentblock">
                <h4>Isolation</h4>
                <p>docker isolates processes from each other and from the underlying host, using lightweight containers.</p>
            </section>
        </div>
        <div class="span3">
            <section class="contentblock">
                <h4>Repeatability</h4>
                <p>Because containers are isolated in their own filesystem, they behave the same regardless of where, when, and alongside what they run.</p>
            </section>
        </div>
    </div>
</div>

<style>
    .twitterblock {
        min-height: 75px;
    }

    .twitterblock img {
        float: left;
        margin-right: 10px;
    }

</style>


<div class="container">
    <div class="row">
        <div class="span6">
            <section class="contentblock twitterblock">
                <img src="https://twimg0-a.akamaihd.net/profile_images/2491994496/rbevyyq6ykp6bnoby2je_bigger.jpeg">
                <em>John Willis @botchagalupe:</em> IMHO docker is to paas what chef was to Iaas 4 years ago
            </section>
        </div>
        <div class="span6">
            <section class="contentblock twitterblock">
                <img src="https://twimg0-a.akamaihd.net/profile_images/3348427561/9d7f08f1e103a16c8debd169301b9944_bigger.jpeg">
                <em>John Feminella ‏@superninjarobot:</em> So, @getdocker is pure excellence. If you've ever wished for arbitrary, PaaS-agnostic, lxc/aufs Linux containers, this is your jam!
            </section>
        </div>
    </div>
    <div class="row">
        <div class="span6">
            <section class="contentblock twitterblock">
                <img src="https://si0.twimg.com/profile_images/3408403010/4496ccdd14e9b7285eca04c31a740207_bigger.jpeg">
                <em>David Romulan ‏@destructuring:</em> I haven't had this much fun since AWS
            </section>
        </div>
        <div class="span6">
            <section class="contentblock twitterblock">
                <img src="https://si0.twimg.com/profile_images/780893320/My_Avatar_bigger.jpg">
                <em>Ricardo Gladwell ‏@rgladwell:</em> wow @getdocker is either amazing or totally stupid
            </section>
        </div>

    </div>
</div>

<!--         <p>Docker encapsulates heterogeneous payloads in <a href="#container">Standard Containers</a>, and runs them on any server with strong guarantees of isolation and repeatability.</p>

        <p>It is a great building block for automating distributed systems: large-scale web deployments, database clusters, continuous deployment systems, private PaaS, service-oriented architectures, etc.</p>

 -->
<div class="container">
    <div class="row">
        <div class="span6">

            <section class="contentblock">

                <!-- <img src="_static/lego_docker.jpg" width="600px" style="float:right; margin-left: 10px"> -->
                <h2>Notable features</h2>

                <ul>
                    <li>Filesystem isolation: each process container runs in a completely separate root filesystem.</li>
                    <li>Resource isolation: system resources like cpu and memory can be allocated differently to each process container, using cgroups.</li>
                    <li>Network isolation: each process container runs in its own network namespace, with a virtual interface and IP address of its own.</li>
                    <li>Copy-on-write: root filesystems are created using copy-on-write, which makes deployment extremeley fast, memory-cheap and disk-cheap.</li>
                    <li>Logging: the standard streams (stdout/stderr/stdin) of each process container is collected and logged for real-time or batch retrieval.</li>
                    <li>Change management: changes to a container's filesystem can be committed into a new image and re-used to create more containers. No templating or manual configuration required.</li>
                    <li>Interactive shell: docker can allocate a pseudo-tty and attach to the standard input of any container, for example to run a throwaway interactive shell.</li>
                </ul>

                <h2>Under the hood</h2>

                <p>Under the hood, Docker is built on the following components:</p>

                <ul>
                    <li>The <a href="http://blog.dotcloud.com/kernel-secrets-from-the-paas-garage-part-24-c">cgroup</a> and <a href="http://blog.dotcloud.com/under-the-hood-linux-kernels-on-dotcloud-part">namespacing</a> capabilities of the Linux kernel;</li>
                    <li><a href="http://aufs.sourceforge.net/aufs.html">AUFS</a>, a powerful union filesystem with copy-on-write capabilities;</li>
                    <li>The <a href="http://golang.org">Go</a> programming language;</li>
                    <li><a href="http://lxc.sourceforge.net/">lxc</a>, a set of convenience scripts to simplify the creation of linux containers.</li>
                </ul>

            </section>
        </div>

        <div class="span6">
            <section class="contentblock">
                <div id="wufoo-z7x3p3">
                    Fill out my <a href="http://dotclouddocker.wufoo.com/forms/z7x3p3">online form</a>.
                </div>
                <script type="text/javascript">var z7x3p3;(function(d, t) {
                    var s = d.createElement(t), options = {
                        'userName':'dotclouddocker',
                        'formHash':'z7x3p3',
                        'autoResize':true,
                        'height':'577',
                        'async':true,
                        'header':'show'};
                    s.src = ('https:' == d.location.protocol ? 'https://' : 'http://') + 'wufoo.com/scripts/embed/form.js';
                    s.onload = s.onreadystatechange = function() {
                        var rs = this.readyState; if (rs) if (rs != 'complete') if (rs != 'loaded') return;
                        try { z7x3p3 = new WufooForm();z7x3p3.initialize(options);z7x3p3.display(); } catch (e) {}};
                    var scr = d.getElementsByTagName(t)[0], par = scr.parentNode; par.insertBefore(s, scr);
                })(document, 'script');</script>
            </section>

            <section class="contentblock">
                <h3 id="twitter">Twitter</h3>
                <a class="twitter-timeline" href="https://twitter.com/getdocker" data-widget-id="312730839718957056">Tweets by @getdocker</a>
                <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
            </section>
        </div>
    </div>

</div> <!-- end container -->


<div class="container">
    <footer id="footer" class="footer">
        <div class="row">
            <div class="span12">

                Docker is a project by <a href="http://www.dotcloud.com">dotCloud</a>

            </div>
        </div>

        <div class="row">
            <div class="emptyspace" style="height: 40px">

            </div>
        </div>

    </footer>
</div>



<!-- bootstrap javascipts -->
<script src="_static/js/vendor/bootstrap.min.js" type="text/javascript"></script>

<!-- Google analytics -->
<script type="text/javascript">

    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-6096819-11']);
    _gaq.push(['_setDomainName', 'docker.io']);
    _gaq.push(['_setAllowLinker', true]);
    _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>


</body>
</html>
