Cloud based apps are very popular in digital world. Cloud service provider runs these application in virtualised environment. For this purpose, it can use hypervisor where each instance of application will run as separate virtual machine. Here, there will be separate OS will be running for each application.
Alternatively, cloud provider can use linux virtualisation environment. Here same linux kernel will allow multiple applications to run.
This is Operating-system-level virtualisation(Also known as container based virtualisation). Containers do not run virtual machines at all, but simply segregate multiple user space environments from each other, while everything runs under one kernel. Container systems tend to have low overhead and high density, but also lower isolation between the different containers. This of course comes at a cost - as container systems only allow 1 kernel running - however they do support various Linux distributions in the different containers at the same time.
Operating-system-level virtualization usually imposes little to no overhead.
It is not as flexible as other virtualization approaches since it cannot host a guest operating system different from the host one, or a different guest kernel. For example, with Linux, different distributions are fine, but other operating systems such as Windows cannot be hosted.
Other problem is that, up to now at least, they cannot be neatly packaged into ready-made and quickly deployable machines – think of the flexibility and time saving offered by Amazon’s myriad AWS machine configs. Also, this means they cannot be easily managed via neat GUI management consoles and they don’t offer some other neat features of VM’s such as IaaS setups and live migration.
Docker and LXC are two popular solutions.
https://en.wikipedia.org/wiki/Operating-system-level_virtualization
https://www.upguard.com/articles/docker-vs-lxc
http://serverfault.com/questions/202794/what-does-linux-server-virtualization-mean