↜ back to home

Why do we have containers


This post reflects my own view of the whole world of virtualization, I summed up here my thoughts but please if you find something that you consider wrong or inexact leave a comment so I can learn by you and improve myself.


While talking about Linux Containers, Docker Containers or more in general about the concept of containers itself I often (as it should be) encounter doubts and questions like:

All this can be summarized in a more simple question:

Why do we have containers ? What we had before was not enough?

In this post I want to try to explain why, in my opinion, OS Level Virtualization (aka. containers) is a thing that matters now primarily by analyzing the details of each virtualization method.

Different types of virtualization

At the moment there are three main distinct types of Virtualization, namely:

The most interesting one for the discussion is the last one but is important to understand that at some extent all types have two common denominators:

The main difference between all those types of virtualization is the level at which them interact with the underlying resources and devices thus is responsible for their difference in terms of security, resources usage and portability.

This discussion can be easily understood in the context of load balancers where there two types of them: Hardware and software load balancers, both do load balancing and while the hardware version typically provides improved performances this comes at the cost of another specific piece of hardware with the limitations of the case. as opposite, software load balancers can be installed on any hardware, are more portable, customizable and probably fits better specific needs.

Given all this, there are a few areas of differentiation between all the different types of virtualization:

Motivations for using Containers

I can’t know what is your intended use case. But if at some extent your motivation consist in decreasing costs related to full virtualization overheads while allowing developers to ship, develop and test code faster we already found two.

In the end, why containers are actually there?

If you’v read up to here you probably think I missed the point, instead what I wanted to write is exactly that OS-Level virtualization (aka containers) is just another way of doing virtualization which solves specific needs that are not solved by others:

We need containers for being able to work closer to the kernel while executing in a fully isolated environment. This specific thing allows us to achieve higher densities and run more workload within the same hardware while obtaining faster delivery and scaling thanks to their nature of high portability.