Containers are the natural evolution in terms of virtualization. As we all know, in the early days, we used to run the application on bare-metal servers. This led to a lot of resources being used, as the server was always sized for peak load and then some (think the engineers safety margin rule).
Then came along virtualization (without delving into the details of full-virtualization, para-virtualization, and hardware assisted virtualization), which simply added a layer (called the Hypervisor) atop the hardware that allowed multiple operating systems to use the abstracted hardware.
This hypervisor was actually a special operating system in itself, and like any regular OS, it had kernel and user space programs. As ...