Sunday, 29 April 2018

Containerization - A beginner's thought

We have been hearing about containers for a while now, especially with Docker gaining momentum in the market back in 2013. There is a notion that these are “cloud stuffs” as we often hear these words related to the Cloud technologies and we used to ignore saying “not my cup of tea”. But now, the world is moving towards these technologies and almost every business want to embrace them to capitalize every possible business opportunities and gain advantage over their competitors. Someone might argue about the relevance of this article now especially when Cloud technologies and containerization have already gained a lot of acceptance in the market. This is for those who are taking their baby steps in to the world of Cloud technologies and Containerization.

So, What is Containerization?     
       
The moment I heard the word ‘Container’ for the first time, the first image that came to my mind was the big cargo container. I believe the best and simplest way to start understanding containerization is to take analogy from the logistics business domain. Imagine the operational overhead a logistics company has to go through when they have to transport a variety of goods using different modes of transport like trucks, buses, ships etc. The company has to package good based on the medium of transport and this creates inefficiency. Now, imagine the same scenario where in the company starts using standard containers so that almost anything can be accommodated and transported much faster from one place to another and between the available modes of transfer. The same inefficiency and operational overheads exists when we move an application from an application developer’s machine to a test environment and from there to further higher environments. It could be because of compatibility issues, version mismatch, configuration issues and many other reasons. But, we end up losing time and effort in fixing the same issues from one environment to other. Containerization provides a solution to such inefficiencies. The below figure can help to better visualize about what I am talking about


Containerization is a standard and efficient way of packaging an application, its libraries and dependencies. Containerization is the result of initiatives to improve the efficient use of resources beyond what Virtualization and Virtual machines can offer. We all have been hearing about and using Virtual Machines (VMs) over a decade now. With Virtualization, the operating system and the applications running on it are packaged together as Virtual Machines. But, with Containerization, only the applications and its dependent objects are packaged together as containers. Multiple containers can run on the same Operating system and they share the operating system kernel. Having said that, virtualization and containerization are not completing technologies. Rather, they are complementary to each other.

 The below figure explains the difference between Virtualization and containerization at a high level



Why Containerization?

1.     Containerization enables applications to run anywhere by isolating the application and its dependencies. The container doesn’t care about the host on which it is running and the host doesn’t care about the containers that run on it. The interfaces are standard and hence more predictable.
2.    Containers remove the OS layer from the package. This makes the container a lot more smaller in size than a traditional VM. This enables accommodating more containers on a machine when compared to full blown VMs there by saving operational cost.
3.    As all dependencies of an application are bundled inside a container, it makes the application more portable.
4.    As containerized applications need not wait for the OS to bootup as in the case of VMs, they can be launched much faster than applications deployed in traditional manner
5.    Containerization approach helps in automated deployments there by supporting DevOps practices. Automated spawning of a new application instance based on predefined load levels can be easily achieved with containerized applications.

However, Containerization is not a silver bullet. There are certain areas which still need improvement and they are being taken care by major tech companies in the market and the contributions from active communities around the world.

#Cloud #Containers #IT