Virtual machines (VM) and containers are virtualization technologies that partition computing resources and isolate workloads. They are the foundations for resource consolidation which leads to the success of cloud computing. VMs perform partitioning and isolation at the machine device level while containers do so at the operation system level. The pros and cons of VMs and containers are generally well understood. VMs provide better isolation and security while containers are less resource intensive and perform better. There are various attempts to address the shortcomings in both communities to narrow the gap between the two. In this paper, we review these efforts and discuss their strengths and weaknesses. We also present the cVM architecture with ideas to explore ways of reducing VM resource demand and improving VM performance towards being comparable to those of containers. cVMs bootstrap from a 'disk template' where Linux Logical Volume Manager snapshot is used to allow cVMs to share read-only files and directories, thus reducing their disk footprint. Similarly, 'memory template' allows cVMs to share read-only code and data memory pages, thus reducing their memory footprint. Finally, cVMs leverage device hotplug capability and lightweight Linux distributions to reduce bootup time without sacrificing too much generality. And cVMs also take advantage of device virtualization and utilize device passthrough to achieve near native I/O performance.