Application Portability - Going beyond IaaS and PaaS - Part 2
In my last post, we looked at the concept of running thousands of hardware-isolated applications on a single physical or virtual host. Applications are isolated from one another, each thinking that it has the whole virtual machine dedicated to itself. The container technology allows for application and its dependencies to be packaged in a virtual container that can run on any server running the same OS. This enables flexibility and portability on where the application can run -on premise, public cloud, private cloud or bare metal, etc. Sharing metadata reduces application footprint and start-up time along with improved performance and multi-tenancy.
Should we build multiple VMs to isolate applications or build complicated abstractions and layering on a VM to achieve this? Here is where the container technology can help. Docker is one such container technology that extends the native Linux kernel capabilities and namespaces to create hardware-isolated OS images with their own isolated allocations of memory, storage, CPU, and network.
The base OS image will be customized using Docker to create a customer image. Docker file system can merge the various layers of customization on the base image together during run-time. As the container can abstract the underlying OS, it may not require a VM and hence can actually run on the bare metal OS as well. Containers may well be the Next VM !!!
Let's look at some of the practical use cases:
1) PaaS Delivery: Today most of the PaaS providers use sandbox methodologies to application colocation on a single OS instance. With the adoption of container technology makes it much easier to abstract the application environments, support multiple languages, databases and also improve manageability and security.
2) DevOps: Container-based PaaS provides app developers the flexibility to build and deploy application environments with much more ease. This reduces the provisioning lead time and also alleviates worries about OS and middleware management, allowing developers just focus on just their applications.
3) Scale out and DR: While most hypervisor technologies allows moving apps around in VMs, we need a compatible hypervisor to run those VMs. However Virtual Containers can run on any server running the same OS, whether on premise, public cloud, private cloud or bare metal allowing scale out to any types of clouds supporting the same OS.
Finally, what benefits and changes can we anticipate?
The Logical boundary of applications ecosystem will move from VMs to Containers while the mobility aspect of applications will move beyond single hypervisor zones:
• A container holding just the application binaries reduces the complexity in provisioning and managing applications
• The coexistence of isolated apps in the same physical or virtual servers will reduce the platform development and management cost
• The use of standard frameworks, instead of platform-specific APIs (sandbox driven),will improve the user adoption
• The container based application is entirely self-contained making it inherently more secure
So what do you think? Are you considering container based Application isolation and delivery as well?