From Virtual Machines to Containers
Ismaayl explains how the containerization arrival makes it possible to improve the use of physical infrastructure:
Nowadays, it’s getting harder and harder for companies to run businesses without applications, and most of them run on servers. Back in the days, every application needed a dedicated server to run it safely and without interruption. To do so, IT needed to purchase a server powerful enough to make sure of it. But before running the application in production, no one can be sure of how much power it actually needed. For that reason, IT ended up most of the time purchasing an overpowered server that will use only 10% or less of its resources. It was a total waste of money, space and time.
Then came the virtual machines. It makes it possible to safely run lots of applications in different environments on the same physical server. A new application is no longer a synonym of a new purchase. Servers that use only a small amount of their power can finally be used fully or almost. It was a huge step forward for the IT universe.
But nothing is perfect, and there is always room for improvement. Virtual machines take a large amount of the server resources just to run. They need to simulate a physical server with all its components: CPU, RAM, disk, network card, etc. And on top of that, every VM needs its own operating system that can be a source of not only a waste of performance but also vulnerabilities.
Virtual machine (VM) and container. Each container uses the operating system of the host server while each virtual machine hosts its own operating system.
Therefore, years ago, the Linux universe started working on a new technology that is cheaper and faster: the containers. They can isolate an application from the outside world without the need of a dedicated operating system and a heavy software to simulate the physical components of the server. That makes it faster to run and easier to maintain. And this is not the only good thing about containers. They are so fast and small that we can use them to divide the monolithic application in several smaller services that communicate with each other. Every small service can run in its own container, separately from the others so it can be fixed and maintained without fearing to break the other parts.
Finally, containers improved most of what the virtual machines have to offer and are more adequate to the modern micro-services software architecture. But they do not replace them, in most cases, we will find them living side by side.