

What does Docker add to just plain LXC? - giis
http://stackoverflow.com/questions/17989306/what-does-docker-add-to-just-plain-lxc?rq=1

======
shykes
Here's what I answered on stack overflow:

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 a tool for developers to automatically
assemble a container from their source code, 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 an "base image" 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](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 distros.
The registry 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.

I hope this helps!

