Containers allow multiple isolated user space instances to run on a single host operating system. Containers are seen as less flexible than virtual machines since they generally can only run the same operating system as the host. Docker adds an application deployment engine on top of a container execution environment. Docker aims to provide a lightweight way to model applications and a fast development lifecycle by reducing the time between code writing and deployment. Docker has components like the client/server, images used to create containers, and public/private registries for storing images.