Earlier days, Physical Servers were used to host the application. Physical servers have good capacity : good amount of ram, big disk capacity. First, an OS is installed, then software and some environment features. But sometimes big servers are hosting smaller applications. Earlier, there were no performance tests and benchmarks. Besides, physical servers usually were not able to host multiple applications, because it required different environment setup (and sometimes even different Operating Systems).
Later Virtual Machines primarily replaced Physical Servers. Several Virtual Machines could be launched on one physical host, each Virtual Machine hosting its own application. Each Virtual Machine occupied its own part of host system resources (ram, disk capacity). This is so called hard level virtualization. Hypervisor is a software by using which hardware virtualization is enabled. VMWare, VirtualBox are hypervisors. Of course, for installing virtualization tool (VMWare or VirtualBox) an Operating System should already be installed on the host. But there are some improvement points about Virtual Machines. First, it is the boot time : it takes several minutes to start an application under the Virtual Machine, because before executing targeted application booting Operating System and launching underlying infrastructure (software, services) takes some time. Second, Operating System maintenance also requires regular care. Third, Virtual Machines cannot change consuming system resources dynamically, because it is a hard level virtualization. Fourth, scalability using Virtual Machines is very challenging (it can be adding more Virtual Machines). In big organizations, it can take much time (days, months) to procure a new Virtual Machine, to scale up an infrastructure. Besides, all maintenance steps must be made before being able to execute an application.
Containerization is a next step after virtualization, because it covers all four improvement points of virtualization. Containerization works with images – lightweight packages with an application and all its dependencies included. For example, Operating system, web server and programming language are separate images packed together. Underneath, containers have a lightweight Operating Systems, they have Operating Systems libraries, but do not have kernel by default. They usually do not take more than two seconds to start. Containerization solves issues with setting up an environment, because it is encapsulated in containers – all pieces grouped together are transfering to host (or more than one hosts). Containers follow Operating System level virtualization, unlike in Virtual Machines. Whatever resources are on the host machine, Containers directly take it. And scaling up environment is pretty quick, since containers take only few seconds to be executed on one of the hosts in the network (in the cluster).
All above contents can be summarized in the following picture :
There are many containerization technologies :
Docker is the most eminent and figures prominently in containerization. More about Docker here.
Usually a management layer must be put on top of containers for handling containers more efficiently. The most widely used tool for this purpose is Kubernetes. Continue about Kubernetes here.