The concept of "containerization" is one of the most important areas of innovation for modern computing. This has a huge impact on cloud computing and on how enterprises develop their cloud applications.
Over the last decade, applications were monolithic. They were built on a single stack such as .NET, Java etc. and they had been deployed to a single server. Any how, they lived long. Then came load balancers where the workload was distributed across multiple computing resources. Still they were monolithic.
After a huge revolution, today applications are constantly developed where security patches and updates are often done. New versions are being developed often. They are built from loosely coupled components and they are deployed to a multitude of servers. This is where containers comes into play.
In brief container is a
Lightweight Linux environment
Introspectable, runnable artifact
So what does a container provide that a virtual machine does not?
- Simple deployment : A container simplifies the deployment process of the application no matter where you are deploying it. It packages the application as a single addressable, registry stored, deployable component.
- Rapid availability: The package can boot faster compared to a modern virtual machine. Leverage micro services : Containers allow developers and operators to subdivide the compute resources further.
- Better performance
- Faster provisioning of resources : Since the developer has in their laptop plenty of compute power to run multiple containers, development is fast and easy.
- Quicker availability of new application instances : Release administration is easy as pushing a new container is a single command.
- Easy and cheap testing : With a container, we can do thousands of simple tests at the same cost.
The significance of containers also lies in the fact that, no matter where we run it, it looks the same everywhere we run it. Therefor using containers, we can install the application in a production data center and we can make it to work exactly the same in the development environment.
According to my point of view, the most important feature that containerization ensures is a portable, consistent format for running applications on diverse hosts. Considered as a whole, containerization allows workloads to easily flow to where they are cheapest and fastest to run.
Containers are the idea of running multiple applications on a single host. Instead of virtualizing a server to create multiple operating systems, containers offer a more lightweight solution by virtualizing the operating system, allowing multiple workloads to run on single host.
Recently containers became popularized by a containerization mechanism called Docker.