At a high level, there are two primary methods of enabling software virtualization for applications:
Examples of hypervisors are VMware ESXi and Microsoft Hyper-V, which are deployed on bare-metal servers and abstracted from the physical components. The abstraction enables sharing of the components by multiple VMs, each running a guest operating system. Each VM is used as a run time environment to build and deploy the application.
In container-based virtualization, a single host operating system runs multiple processes in a coordinated way. The isolation layer creates containers for running applications separately and those containers can be easily scaled with the help of Kubernetes orchestration. As containers are a minimum set of software libraries that share the operating system resources, they are of lighter weight compared to virtual machines where the full host operating system and its applications are virtualized.
Note: Pods are the smallest deployable units of computing that you can create and manage in Kubernetes. For more information, see Kubernetes Pods.
Containers have reshaped the way companies think about developing, deploying, and maintaining applications. A container consists of an entire runtime environment—an application, plus all its dependencies, libraries and other binaries, and configuration files to run it, bundled into one package. Containers isolate software from its environment, enabling applications to run securely and reliably from one computing environment to another. This isolation also translates to modular applications components, allowing rapid refresh of software often referred to as Continuous Integration and Continuous Delivery (CI/CD).
The following figure contrasts VM-based virtualization with containerization:
In container-based virtualization, the combination of the guest operating system components and any isolated software applications constitutes of a container that is grouped into pods with Kubernetes orchestration, running on the host server. Pods are the smallest deployable units of computing that you can create and manage in Kubernetes. For more information, see Kubernetes Pods. The preceding figure shows these pods as SQL pod1, SQL pod2, SQL pod3, and SQL pod4.
Both types of virtualization increase the efficiency of system hardware investments by supporting multiple users and applications in parallel. Containerization further improves IT operations productivity 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.