Two primary methods for enabling software applications to run on virtual hardware are:
The older and more pervasive virtualization method, first developed by Burroughs Corporation in the 1950s, is the use of VMs and a hypervisor. This method was replicated with the commercialization of IBM mainframes in the early 1960s. The primary virtualization method that is used by platforms such as IBM VM/CMS, VMware ESXi, and Microsoft Hyper-V starts with a hypervisor layer that abstracts the physical components of the computer. This abstraction enables sharing of the components by multiple VMs, each running a guest operating system. A more recent development is container-based virtualization, in which a single host operating system supports multiple processes that are running as virtual applications.
The following figure contrasts VM-based virtualization with container-based virtualization. In container-based virtualization, the combination of the guest operating system components and any isolated software applications constitutes a container running on the host server, as indicated by the App 1, App 2, and App 3 boxes.
Figure 2. Primary virtualization methods
Both types of virtualization were developed to increase the efficiency of computer hardware investments by supporting multiple users and applications in parallel. Containerization further improves the productivity of IT operations by simplifying application portability. Application developers most often work outside the server environments in which their programs run. To minimize conflicts in library versions, dependencies, and configuration settings, developers must re-create the production environment multiple times for development, testing, and preproduction integration. IT professionals have found containers easier to deploy consistently across multiple environments because the core operating system can be configured independently of the application container.