Virtualisation with Docker Containers
In a software driven world where omnipresence and ease of deployment with minimum overheads are the major requirements, the cloud promptly takes its place in every picture. Containers are creating their mark in this vast expanse of cloud space with the world’s top technology and IT establishments relying on the concept for their infrastructural necessities. Tech giants like Facebook, Google and Microsoft use containers in their streamlined processes to facilitate a secure and easy deployment into the cloud production environments. This deployment with containers offers a technique, which abstracts the application from the run-time environment; much like virtual machines and this is done, of course by virtualization.
The two core concepts to be explored here are:
- How containers are built on virtualization technique
- How they offer an alternative to virtual machines
1. To answer how containers enable virtualization let us discuss in detail what is virtualization and how containers come into play with this concept.
Virtualization is a technique, which essentially creates an illusion of a resource such as a desktop, storage, network or an operating system. Devices, applications and human users possess the capability of interacting with these resources. This illusion also called virtualization expands the capabilities of traditional systems, which are limited by their own physical resources.
Now, containers enable this virtualization for applications that are deployed in them. Applications in containers run independently, isolated from any physical resource. Containers virtualize the OS, CPU, memory, storage and network resources there by providing a controlled environment that can be scaled up or down as required. A container also packages the application along with its dependencies and necessary files, which enables the application to be deployed on any environment without having to configure the server, hardware or software
This still sounds similar to virtualization implemented through virtual machines right?
So before we get into what more containers can do let us clear up how containers differ from virtual machines
2. A virtual machine is a form of hardware virtualization. The hardware is logically separated from the other resources. The hardware can be any system such as a desktop (with hardware and its own OS) called the host machine, on which several virtual machines or guest machines can run, each with their own separate operating systems. This is made possible by a firmware called the hypervisor.
Containers like virtual machines, run on a host machines. They can also be controlled as needed and provide isolation of application from the run-time environment. However, containers aim at operating system virtualization. Unlike virtual machines, in a containerized system guest operating systems need not be installed on the host system. Instead, the underlying host operating system is shared by all instances of containers containing the application code. This makes containers light weight and reduces operating system overheads associated with virtual machines such as patching, upgrading, driver support etc. Moreover, it reduces the amount of resources of the host machine consumed by the presence of individual operating systems.
Benefits of containers:
- Applications can be deployed without any worry about the run time environment. As a result, an application can easily be moved through the software development cycle and can run anywhere, for example, on Mac OS, Linux, Windows and even in data centers. This results in less expenditure of time on examining the environment and more time can be time on developing new functionality.
- Multiple containers with applications can be run on the same instance of physical resource sharing an operating system. These containers being lightweight are fast and efficiently utilize the computing resources available.
- Containers are isolated from one another, which gives the developer the leeway to split application services into different containers. These containers do not share any dependencies and each can be manipulated and updated by the developer at will.
- Containers come with the inbuilt capability of version control.
There are various platforms for deployment of containers such as Docker, Google Kubernetes, Core OS, Red Hat and AWS. However, due to the extreme popularity of Docker Inc. in this domain, containers are synonymous with the term ‘Docker Containers’.
Linux Virtualization : Linux Containers (lxc)