:title: FAQ
:description: Most frequently asked questions.
:keywords: faq, questions, documentation, docker

FAQ
===


Most frequently asked questions.
--------------------------------

How much does Docker cost?
..........................

   Docker is 100% free, it is open source, so you can use it without paying.

What open source license are you using?
.......................................

   We are using the Apache License Version 2.0, see it here:
   https://github.com/dotcloud/docker/blob/master/LICENSE

Does Docker run on Mac OS X or Windows?
.......................................

   Not at this time, Docker currently only runs on Linux, but you can
   use VirtualBox to run Docker in a virtual machine on your box, and
   get the best of both worlds. Check out the
   :ref:`install_using_vagrant` and :ref:`windows` installation
   guides.

How do containers compare to virtual machines?
..............................................

   They are complementary. VMs are best used to allocate chunks of
   hardware resources. Containers operate at the process level, which
   makes them very lightweight and perfect as a unit of software
   delivery.

What does Docker add to just plain LXC?
.......................................

   Docker is not a replacement for LXC. "LXC" refers to capabilities
   of the Linux kernel (specifically namespaces and control groups)
   which allow sandboxing processes from one another, and controlling
   their resource allocations.  On top of this low-level foundation of
   kernel features, Docker offers a high-level tool with several
   powerful functionalities:

   * *Portable deployment across machines.* 
      Docker defines a format for bundling an application and all its
      dependencies into a single object which can be transferred to
      any Docker-enabled machine, and executed there with the
      guarantee that the execution environment exposed to the
      application will be the same. LXC implements process sandboxing,
      which is an important pre-requisite for portable deployment, but
      that alone is not enough for portable deployment. If you sent me
      a copy of your application installed in a custom LXC
      configuration, it would almost certainly not run on my machine
      the way it does on yours, because it is tied to your machine's
      specific configuration: networking, storage, logging, distro,
      etc. Docker defines an abstraction for these machine-specific
      settings, so that the exact same Docker container can run -
      unchanged - on many different machines, with many different
      configurations.

   * *Application-centric.* 
      Docker is optimized for the deployment of applications, as
      opposed to machines. This is reflected in its API, user
      interface, design philosophy and documentation. By contrast, the
      ``lxc`` helper scripts focus on containers as lightweight
      machines - basically servers that boot faster and need less
      RAM. We think there's more to containers than just that.

   * *Automatic build.* 
      Docker includes :ref:`a tool for developers to automatically
      assemble a container from their source code <dockerbuilder>`,
      with full control over application dependencies, build tools,
      packaging etc. They are free to use ``make, maven, chef, puppet,
      salt,`` Debian packages, RPMs, source tarballs, or any
      combination of the above, regardless of the configuration of the
      machines.

   * *Versioning.* 
      Docker includes git-like capabilities for tracking successive
      versions of a container, inspecting the diff between versions,
      committing new versions, rolling back etc. The history also
      includes how a container was assembled and by whom, so you get
      full traceability from the production server all the way back to
      the upstream developer. Docker also implements incremental
      uploads and downloads, similar to ``git pull``, so new versions
      of a container can be transferred by only sending diffs.

   * *Component re-use.* 
      Any container can be used as a :ref:`"base image"
      <base_image_def>` to create more specialized components. This
      can be done manually or as part of an automated build. For
      example you can prepare the ideal Python environment, and use it
      as a base for 10 different applications. Your ideal Postgresql
      setup can be re-used for all your future projects. And so on.

   * *Sharing.*
      Docker has access to a `public registry
      <http://index.docker.io>`_ where thousands of people have
      uploaded useful containers: anything from Redis, CouchDB,
      Postgres to IRC bouncers to Rails app servers to Hadoop to base
      images for various Linux distros. The :ref:`registry
      <registryindexspec>` also includes an official "standard
      library" of useful containers maintained by the Docker team. The
      registry itself is open-source, so anyone can deploy their own
      registry to store and transfer private containers, for internal
      server deployments for example.

   * *Tool ecosystem.* 
      Docker defines an API for automating and customizing the
      creation and deployment of containers. There are a huge number
      of tools integrating with Docker to extend its
      capabilities. PaaS-like deployment (Dokku, Deis, Flynn),
      multi-node orchestration (Maestro, Salt, Mesos, Openstack Nova),
      management dashboards (docker-ui, Openstack Horizon, Shipyard),
      configuration management (Chef, Puppet), continuous integration
      (Jenkins, Strider, Travis), etc. Docker is rapidly establishing
      itself as the standard for container-based tooling.

Do I lose my data when the container exits?
...........................................

Not at all! Any data that your application writes to disk gets preserved
in its container until you explicitly delete the container. The file
system for the container persists even after the container halts.

Can I help by adding some questions and answers?
................................................

   Definitely! You can fork `the repo`_ and edit the documentation sources.


Where can I find more answers?
..............................

    You can find more answers on:

    * `Docker user mailinglist`_
    * `Docker developer mailinglist`_
    * `IRC, docker on freenode`_
    * `Github`_
    * `Ask questions on Stackoverflow`_
    * `Join the conversation on Twitter`_


    .. _Docker user mailinglist: https://groups.google.com/d/forum/docker-user
    .. _Docker developer mailinglist: https://groups.google.com/d/forum/docker-dev
    .. _the repo: http://www.github.com/dotcloud/docker
    .. _IRC, docker on freenode: irc://chat.freenode.net#docker
    .. _Github: http://www.github.com/dotcloud/docker
    .. _Ask questions on Stackoverflow: http://stackoverflow.com/search?q=docker
    .. _Join the conversation on Twitter: http://twitter.com/docker


Looking for something else to read? Checkout the :ref:`hello_world` example.
