Usually, any web applications consist of a Frontend, Backend, and Database. As a developer, we may use different languages or frameworks like React, Node js, Angular, Django, etc. to develop an app.
At the end of the day, we need hardware like Memory, Processors(CPU), and Storage to run our application. There are two software - System software like OS, Antivirus, etc. and Application software like what we develop using frameworks/languages, Word, Excel, etc. Our aim is to run our app irrespective of System software(OS) and hardware setup. I know I am oversimplifying things but worth it.
The application we develop must be used by all irrespective of their environments like OS, memory, and specifications. So we host our application on a server located somewhere in the world. This is called 'Cloud'. So Cloud solves the problem of installing all the required setups from the user end. This saves space and memory on the user's end.
From the development-deployment perspective, we need to optimize the server. After all, the server is the larger version of our computer with OS and hardware. When we split only the hardware in the server, this is called 'Virtualization. The software that splits the hardware like memory and storage usage is called 'Hypervisors'. Therefore when I put my application on the server(cloud), I need to install my OS(from which I developed), dependencies, libraries, etc on top of the server. This literally created another machine inside the server and this machine is called Virtual Machines(VM). Here we have Host OS(server) and Guest OS(what we install on the server for the app)
Say we have hosted many apps on the same server and hence we should have many guest OSes installed on the server even though all apps required the same OS because every app is developed by us. Also, there will be many VMs. Here the main problem is Guest OS because it occupies more space in the server and is proportional to the number of apps the server hosts. Usually, any OS occupies at least 500 MB of storage. This guest OS is added in addition to Host OS.
What if we find a way to use Host OS efficiently?
Let's find a way out. We know OS is system software and once the system is switched ON, it will manage all the processes. There is one core component in OS called Kernel that enables the communication between software and hardware. So basically kernel manages memory and CPU.
Leveraging the host OS Kernel is called Container technology
This concept is also called OS-level virtualization. The platform that enables us to do this is called 'Docker'