This project is open-source and available at: https://github.com/dotcloud/openstack-docker.
What is OpenStack?
OpenStack is a collection of open source technologies that provides massively scalable cloud computing software. OpenStack can be used by corporations, service providers, VARS, SMBs, researchers, and global data centers looking to deploy large-scale cloud deployments for private or public clouds. 
What is Nova (OpenStack Compute)?
OpenStack Compute gives you a tool to orchestrate a cloud, including running instances, managing networks, and controlling access to the cloud through users and projects. The underlying open source project’s name is Nova, and it provides the software that can control an Infrastructure as a Service (IaaS) cloud computing platform.
It is similar in scope to Amazon EC2 and Rackspace Cloud Servers. OpenStack Compute does not include any virtualization software; rather it defines drivers that interact with underlying virtualization mechanisms that run on your host operating system, and exposes functionality over a web-based API. 
What is Docker?
Docker is an open-source engine which automates the deployment of applications as highly portable, self-sufficient containers which are independent of hardware, language, framework, packaging system and hosting provider. 
Why is Docker useful behind Nova?
The Linux Containers deployed with Docker have multiple advantages over the “normal” virtual machines usually deployed by Nova. Those advantages are speed, efficiency, and portability. A Linux Container is a group of processes isolated from the rest of the system. From the inside, a Linux Container “looks like” a virtual machine, with its own resources (network interface, routing tables…), except that it doesn’t need the heavy machinery required by virtual machines to expose or emulate I/O devices or hardware components. This means that containers are much faster to boot, have less memory and CPU overhead, while retaining the ability to “run anywhere” like a virtual machine. The only requirement is to run Linux, since containers share the kernel of their host.
This better efficiency means that instead of booting a VM in a few seconds, in can spawn multiple containers in milliseconds. Instead of worrying about the storage used by your VMs, you can store hundreds or thousands of containers on a typical host. Last but not least, you don’t have to worry anymore about compatibility between KVM, Xen, VMWare, VirtualBox, or installing “guest additions”: Docker containers work exactly the same way on (and are portable across) any x64 machine (virtualized or not). The only requirement is a fairly modern Linux Kernel (like 3.8).
OpenStack is already a very good environment to automate the deployment of distributed systems, like large-scale web deployments, database clusters, continuous deployment systems, private PaaS, service-oriented architectures… Containers make it even more cost effective and easier.
And since Nova is fully integrated with the other OpenStack components, you can manage Linux Containers without having to know anything about Docker or LXC. For instance, you can use the Horizon web interface to deploy a cluster of containers.
This demo has been made through a fresh install of DevStack.
Let’s create a container that displays the date every 10 seconds.
You can use the “Post-Creation” tab (basically the user-data of the instance) to provide a script to run when the instance starts. If you leave it empty, it will execute a bash shell (this also prevents the container from exiting immediately after being started). It is not mandatory, but at some point, you will probably want to spawn an SSH server.
The container is now running and is seen by Nova as a normal VM, the only difference is that it reached the “RUNNING” state in just a split second!
The running container has an IP assigned by Quantum and configured into the container by the driver.
You can also access the Console to verify that the date has been correctly written every 10 seconds as expected by our script.
Using the CLI?
Let’s use Nova’s CLI to check that the container is running correctly:
You can also use Glance’s CLI to see the images available on Docker:
By default, this list will only contain Docker images from the basic library. But adding other images is very easy. Let’s say I want to use an Apache image. The following command will let me add any image available on Docker’s Index:
This command communicates with Docker to search all images in the Docker index matching the string “apache”. Each match found will show up as a Glance image:
Those images can, in turn, be used by Nova to spawn new containers. Let’s do the same thing as before, but using the CLI for a change:
How does it work under the hood?
Even though Docker is typically used through its CLI, the Docker daemon also provides a REST API to use it programmatically. The Nova driver is written in Python and talks to Docker using a simple HTTP library.
The following chart explain how Nova is using Docker through the driver:
You can find us there:
- Official mailing list: https://groups.google.com/forum/#!forum/docker-club
- IRC: #docker on irc.freenode.net
-  http://docs.openstack.org/trunk/openstack-compute/admin/content/ch_getting-started-with-openstack.html
-  http://docs.openstack.org/trunk/openstack-compute/admin/content/ch_introduction-to-openstack-compute.html
-  http://www.docker.io/
-  http://lxc.sourceforge.net/
-  http://devstack.org/
-  https://wiki.openstack.org/wiki/Quantum
-  https://index.docker.io/