The Evolution of Application Deployment
How did we change from physical servers to containerization?

The Era of Physical Servers
Long back when the whole world was living in peace and harmony, people purchased a new server every time an application had to be hosted and that particular server was used in the deployment of only that particular application. So what if we had to host “n” number of applications? Then we had to purchase “n” number of physical servers and install Operating Systems on each one of them. Each of these servers consumes a lot of power and produce heat, so cooling systems had to be installed for all of them. Cost, storage, and network infrastructure were a burden as well. Moreover, the utilization of physical resources by the applications was very limited, the applications were only able to utilize 6–10% of the physical resources.
The Era of Virtual Machines
The above-mentioned problem was faced by the entire IT industry and hence the arrival of Virtual Machines solved the problem to some extent. Virtualization transformed our physical hardware(RAM, Storage, CPU) into software components. It allows us to run multiple OS as virtual machines on a single server. Each of these virtual machines had it’s own hardware and OS. This was achieved with the help of Hypervisor, which transformed the physical resources into their virtual counterparts. A hypervisor is a software responsible for creating and running virtual machines, it allows one host computer to support multiple guest VMs by virtually sharing its resources, such as memory and processing.
So with the help of virtual machines, we were able to deploy an application in each of these machines and thus increasing the resource utilization drastically from about 10% to 50–60% but still, this had its fair share of disadvantages. With the need to install OS in each of these systems, they utilized a lot of RAM and the same applies to other physical resources like CPU and hard disk.
The Era of Containerization
To overcome the disadvantages that we observed in virtualization, we came up with containerization. Containerization is defined as a form of operating system virtualization, through which applications are run in isolated spaces called containers, all using the same shared operating system (OS). A container is essentially a fully packaged and portable computing environment:
- Everything an application needs to run — its binaries, libraries, configuration files, and dependencies — is encapsulated and isolated in its container.
- The container itself is abstracted away from the host OS, with only limited access to underlying resources — much like a lightweight virtual machine (VM).
- As a result, the containerized application can be run on various types of infrastructure — on bare metal, within VMs, and in the cloud — without needing to refactor it for each environment.

Containerization differs from Virtualization in a few major aspects:
- There is no wastage of resources in containerization since docker shares the kernel of the host OS, unlike virtualization.
- Containerization uses a docker-engine whereas, in the virtualization, a hypervisor is used.
- There is no separate guest OS in the case of a container.
- We can deploy more containers compared to virtual machines on the same physical server.
- Binaries and libraries can be shared in the containers but not in virtual machines.
- Provisioning of containers is much faster when compared to virtual machines.
With the arrival of containerization, we had minimum to no resource wastage and thus it’s the best way to deploy our applications in a fast and efficient manner. That sums upon how we started with physical servers and ended up with containers. If you find this article helpful, please drop some claps and feel free to share the article. This is Vinesh signing-off. Byeee 😋
