Docker Clustering: Design proposal.

Authors: @aluzzardi and @vieux.

The goal and scope of this change is to allow docker to manage a cluster
of docker hosts.

The target audience for clustering is modeled after Docker itself:
developer and devops first then enterprise later. Enterprise requires
additional features such as authentication, ACLs, auditing and tooling
which will come at a later time.

The system is designed to handle workloads in the same way as Docker: it
can run both long-running and one-off tasks. Batch processing can be
built on top of the API using the one-off primitive.

The architecture is based on an evented model where the master queries
the registered slaves within the system and checks the current state of
the slaves against the requested state by the user.  It reconciles any
differences and updates the cluster state with the required changes.

Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
Signed-off-by: Victor Vieux <vieux@docker.com>
Would be useful to manage these key/value pairs on a *running* node, not only at start. These values are not tied to the *actual* hardware/specs of the node and are just custom properties that can be assigned. For example, if I want to "promote" a node to be my "production" node, I should be able to do so.

Since "discovery" is already handled through hub.docker.com, would it make sense to be able to manage these properties *via* the website? Ie offer a control panel to manage key/value pairs (besides being able to manage them through the API)