I 've been playing around with openstack for some time, and it seems kilo release comes with support for docker. This let's you run docker containers on openstack. I will be using here devstack on Centos 7, other distros should be more less same game. So let's see how openstack and docker play along.

This has been tested on Centos 7, Ubuntu should be absolutely same thing. Start up virtual machine, I am running Centos 7 (6 cores + 8Gigs of RAM assinged) through parallels on mac, smaller VM will work too.
To make things simpler, I will disable selinux on Centos 7 and make Dan Walsh cry, so either run setenforce 0, or edit /etc/sysconfig/selinux (set to disabled and reboot).

#Update system before we start
sudo yum install epel-release  
sudo yum -y update  
sudo yum -y install python-pip python-devel git openssh-server  
sudo yum groupinstall "Development Tools"  
sudo setenforce 0  
sudo mkdir /opt/stack && chown deki:deki /opt/stack/ -R  
git clone https://git.openstack.org/stackforge/nova-docker /opt/stack/nova-docker  
git clone https://git.openstack.org/openstack-dev/devstack /opt/stack/devstack  
#Switch to kilo stable branch
cd /opt/stack/nova-docker && git checkout -b kilo origin/stable/kilo  
cd /opt/stack/devstack && git checkout -b kilo origin/stable/kilo  
cd /opt/stack/nova-docker  

Now the important bit, as stack.sh will not work without it:
Edit file: /opt/stack/nova-docker/novadocker/virt/docker/driver.py
from nova.openstack.common import fileutils to from oslo_utils import fileutils
To simplify further, I will not make any other modifications to devstack, so

cd /opt/stack/devstack  
#Run stack.sh and have a cup of coffee

It should complete and show something like:

##This is your host IP address:
##2015-08-05 09:40:07.103 | Skip setting lvm filters for non Ubuntu systems
##This is your host IPv6 address: ::1
##Horizon is now available at
##Keystone is serving at
##The default users are: admin and demo
##The password: mysecretpassword
##2015-08-05 09:40:07.108 | stack.sh completed in 278 seconds.

In my case I had to restart firewall, not sure yet why, so do:

sudo service firewalld status  
#If it shows:
#Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled)
#   Active: inactive (dead)
sudo service firewalld start  

So lets verify all is well:

docker version  
# Lets try it out:
. openrc admin
docker pull larsks/thttpd  
docker save larsks/thttpd | glance image-create \  
--name larsks/thttpd \
--is-public true \
--container-format docker \
--disk-format raw

. openrc demo
nova boot --image larsks/thttpd \  
--flavor m1.small test0

#Wait a bit and nova list will show:
[deki@localhost devstack]$ nova list
| ID                                   | Name  | Status | Task State | Power State | Networks         |
| 83678e40-78f9-4d41-90d0-c8dbd75c54b9 | test0 | ACTIVE | -          | Running     | private= |

[deki@localhost devstack]$ nova floating-ip-create
| Id | IP         | Server Id | Fixed IP | Pool   |
| 1  | | -         | -        | public |

nova floating-ip-associate test0  
#and finally try it out and behold:

will return bellow:

  <title>Your web server is working</title>
    <style type="text/css">
    body {
      text-align: center;
      font-family: Arial,"Helvetica Neue",Helvetica,sans-serif;
    pre {
      border: thin solid black;
      padding: 1em;
      background-color: #c0c0c0;

    #summary {
      max-width: 40em;
      margin: auto;
      text-align: left;
  <div id="header">

<strong>You have a web server.</strong>

<div id="summary">  
    This is a statically compiled version of <a href="http://acme.com/software/thttpd/">thttpd</a>
    put together to build a demonstration container for my
    <a href="https://github.com/larsks/heat-kubernetes">Heat templates for Kubernetes</a>.  But maybe
    you'll find it useful for other things.


Not too bad after all. Bit of tinkering here and there, but it does work fine.