Virtualisation is a mechanism by which access to a resource is manipulated by a layer that separates the resource itself from the physical layer. Virtualisation is commonly referred to as an abstraction layer. An obvious example of compute virtualisation is the Hypervisor (VMware or Hyper-V for example). The Hypervisor is the software that contains the many virtual machines, and runs on a single physical machine.
Virtualisation of the compute platform dates back to the mid 1960's, when IBM introduced an early version in the form of the IBM System 360-67 Mainframe. The mini computers that evolved in the 1970's, notably the Digital Equipment Corporation VAX range, very successfully incorporated a virtual memory system, and became a market leader in mini computers (as they were called ironically).
Virtualisation on x86 appeared in the late 1990's when a research team at Stanford developed VMware, code named DISCO. VMWare and other compute virtualisation platforms entered circulation among enterprise users in early 2000, and revolutionised the strategy for compute processing from that point. It was then a race to adopt a virtualised compute strategy to squeeze ever greater efficiencies from physical hardware. A similar race to what we see today with the stampede to public Cloud. Before virtualisation took hold, the standard approach for all compute was to purchase dedicated physical machines. This resulted in a huge spread of servers running individual business applications. When you consider that utilisation may, at best, run at somewhere between 35% and 45% on a single physical machine, then about 65% of your expensive physical resource is lying idle, waiting on the off chance that it may be consumed as demand grows. The inefficiencies become even more alarming when you factor in the additional overhead of disaster recovery, which may see you running a mirror datacentre which is entirely idle waiting for that disaster to happen. That was the 1990's, and in to the 2000's until attitudes changed and technology moved forward.
The benefits of virtualisation were also realised, albeit later, for data storage. For most of the first decade since the year 2000, storage suffered the same pre-virtualisation inefficiencies. This was a time when the SAN (Storage Area Network) was growing as an enterprise storage infrastructure. The SAN allowed for the consolidation of storage by providing a fibre channel network for servers to attach to storage disks (block storage LUNs) presented from a ‘farm’ of storage arrays. The SAN provided a high-speed storage platform accessible to a very large number of servers, and similar in performance to storage attached directly to the server. The SAN reduced the support overhead by consolidating storage in one place, rather than have hundreds or even thousands of servers with direct attached physical disks. Although the SAN improved storage efficiencies (imagine the overwhelming challenge of managing a thousand servers with at least 4 physical disks each), the earlier storage arrays, with a few exceptions, did not support virtualisation mechanisms. These are mechanisms like ‘Thin provisioning’, de-duplication and compression, and result in far greater efficiency in storage utilisation. 3Par (now owned by HP) was an early advocate of thin provisioning on its block storage, and built its popularity on being able to ‘over-provision’ and therefore drastically improve storage utilisation efficiencies. A Thin Provisioned LUN (disk drive) is essentially a container that consumes no physical storage until it is written to, and that 'container' will consume only the amount of storage written to it. Compare that to the pre-virtualisation LUN, which will have reserved (effectively consumed) the size of the LUN from the moment it was created.
If we fast-forward to the present day, we can think of application containers (Docker) as the next layer of efficiency. Among the possible benefits from containerising your application is the increase in density that is achieved from running multiple application containers on a single virtual machine, which shares the same physical machine with many other virtual machines.