One of the challenges that software engineers wanted to solve is to reduce the amount of time and effort put into establishing and maintaining a common and repeatable deployment platform and process while deploying source code that need varied environment and OS to operate with. Traditionally, we have an operational or infrastructure team whose full-time job is to provision these environments on Dev, Test, UAT, Stage and Production to support compilation and deployment on separate machines to match the programming language and OS needs of the application or the executable that form the software solution. So, if you have 4 different programming platforms used, you need provision and support 4 different provision processes and environments.
This is where the concept of containerization came into play. Containerization is a technology that provides a single platform or generally called containers that can host a deployable code written in any programming language or frameworks and at the same ensure that the deployed code in that container will work in any environment and that the deployment process will be the same on Dev, Test, UAT, Stage or production. Discovery and implementation of this technological concept has immense potential, especially in the field of DevOps where provisioning of code into multiple environments has been so much easier with the click of a button. Containerization has become the backbone of the modern infrastructure provisioning technologies/services or more commonly known as Iaas (Infrastructure as a Service).
Containerization technology is different from the common Virtualization technology in the way that it virtualizes the Operating System to create deployable containers that run off of the same OS whereas the later virtualizes the hardware using technology such as Hypervisor. Containers are light weight when compares to the VMs, usually in terms of MBs. While using containers you can expect your code written in C# or Java or Python to run on the same container. The container vendor ensures that the container has support for all libraries, frameworks etc. that each of your app needs – this is core premise of your different apps being able to be deployed and runnable in the same fashion irrespective of their native format and requirements.
One of the leading vendors of containerization technology is Docker. We also have other vendors in the market space such as Google Kubernetes Engine, Microsoft Azure and Amazon ECS (Elastic Container Service).