Even though OpenStack has supported VMs and baremetal for quite some time, Containers are pretty new to OpenStack. The initial focus in OpenStack was to extend VM Orchestration to also manage Containers. The Nova Docker driver and Heat Docker plugin are examples of this. This was not widely adopted as some of the Container functionality was missing in this approach. The OpenStack Magnum project addresses some of the limitations and manages Containers as a first-class citizen like a VM.
Nova typically manages VMs. In this approach, the Nova driver is extended to spawn Docker Containers.
The following diagram describes the architecture:
The following are some notes on the architecture: