Companies which uses MicroServices technology would use containers for their deployment. In this article we will see the benefits of containers.
The concept of containers was started way back in 1979 with UNIX chroot. But complete implementation of Linux container manager LXC was implemented using cgroups and Linux namespaces in 2008.
Initially IT industries were using bare metal Linux or Windows servers where they would run multiple processes but it required lots of maintenance and they end up by paying more money to the unused hardware resources.
Virtual Machines :
Virtual machines were implemented to reduce the hardware resource consumption of servers. Concept of virtual machine is, it has a hypervisor layer basically a software layer which help to isolate multiple Guest operating system.
Virtual Machine Architecture :
In Virtual machine architecture we can run multiple servers in one single machine with the help of Hypervisors like VMware ESXi, Microsoft Hyper-V, KVM, etc.
This virtual machines also require some amount of bootup time to start the Guest OS also to run MicroServices it requires multiple Guest OS.
Containers run in user space on top of operating systems kernel. Container technology can also be called as OS level Virtualization technology since it provides way to isolate multiple user space on top of host operating system. Container is lot more light weight than Virtual machines.
Container Architecture :
Container architecture shows that it has a Container Engine on top of Host operating System which will help to run container in isolated user space.
Container contains only binaries and libraries with packages required to run the application. They don’t need to boot up the full operating system, so when we launch containers instead of waiting for minutes almost instantly starts the application. Container are light weight it can also be in few mega bites.
Benefits of Containers :
1, We have isolation which means we can develop a production ready application even from our local using container engine.
2, We can just ship our code with all dependencies which will work in all Dev, QA and Prod environments.
3, Docker helps development teams to ship faster.
4, We can build images very quickly and distribute it very easily using registries like DockerHub.
5, We can run same image unchanged on laptops, data center VM’s and cloud providers.
6, Information of one container is isolated from other containers using the operating system level isolation Kernel features of linux [ Ex. LXC].
Containers on Cloud Providers :
Containers on Cloud Providers is little differ from containers in Host machine. Cloud providers still uses Hypervisors to isolate the customers from each others.
In this architecture we could see Gust OS and Hypervisor layers in between Host OS and Container Engine. In cloud environments container engine runs on Guest Operating System.
Docker, Rocket, and other container platforms cannot run on a single host in a production environment, the reason is that they are exposed to single point of failure. While a collection of containers are run on a single host, if the host fails, all the containers that run on that host will also fail. We have other orchestration systems like Kubernetes and Openshift, We will cover more practical implementation of kubernets and openshift in up coming articles.