The Virtualization and Cloud Computing Offspring – Docker!

I started my IT career about 12 years ago. I worked as an IT Intern while pursuing my Graduate degree and did everything from building desktops, servers, patching operating systems etc. in the early days of my career. From reading a book cover to cover (yes, I am one of those who will read everything before actually playing with a technology 🙂 ) to making Microsoft TechNet my best friend (Google searches were not as big in 2004-2005 as they are today!), my career has evolved many-fold in the past decade. I have worked on (and played with) almost all Microsoft systems technologies since the early part of this millennium. I have enjoyed learning (and unlearning) many computing concepts with the advent of virtualization (VMWare memory ballooning, dynamic resource scheduling and memory swapping are concepts that certainly sent me into a tizzy the first time I read about them!).

Virtualization

Virtualization is a revolutionary (and indeed evolutionary as well) concept in computing. Traditionally, we have been used to consuming or producing computing content on a physical device (think laptop, desktop, smartphone, tablet etc.). However, there is no scalability to that physical notion. What if your wife, 3 kids and parents all want to work on 1 laptop at the same time? It may become physically untenable to do so at the same time! Now extend that scenario to any organization. There are shared resources such as enterprise content management (a fancy name for document sharing, synchronization and collaboration), applications, development platforms, directory services etc. that are hosted on servers somewhere in the office data center and all employees magically have access to those while sitting on their desktop in their cubes/offices. The power and magnitude of these “hidden” computing resources was immense, however, they were hosted either on physical servers or blade servers (a big chassis containing many servers all housed in 1 big unit) with each physical server capable of providing resources to only 1 operating system at any given time. What if you could host multiple operating systems (guest Operating System) on 1 physical server (desktop or server virtualization) or what if you could host 1 application on 1 platform but multiple users could use that application at the same time (application virtualization)? Virtualization industry leaders such as VMware, Citrix, Microsoft, Amazon etc. provided some of those revolutionary virtualization technologies to the consumer and enterprise alike.

Cloud Computing

Around the same time that the virtualization storm was brewing, cloud computing was gaining significant traction in the computing industry. Everything then became an “AAS” (as-a-service). I suddenly found myself scampering trying to understand Platform-as-a-Service (PaaS), Infrastructure-as-a-service (Iaas). Cloud computing provided any individual or organization the ability to use computing resources (applications, servers, desktops, entire development infrastructure and platforms) in an elastic manner i.e. use and pay for resources as and when you need them. Capacity would be instantly available at a hosted or managed services provider (but not hosted on infrastructure physically located, hosted and managed by you or your IT team). The external provider would host resources at a physical location not visible to you and in all likelihood a lot of this infrastructure would be virtualized. You could then share some of the existing resources on the same server/platform with other tenants (public cloud) or enter into an agreement with the provider for the exclusive use rights of a certain portion of their infrastructure (private cloud).

Docker

The perfect marriage of virtualization and cloud computing created the perfect storm for the next generation of computing advances. I recently found many of my friends in the IT industry as well as some colleagues talk about a new company “Docker”. Docker takes virtualization and application delivery to another level. Traditionally, applications needed to be hosted on an operating system. For instance, if you want to write a document or edit a spreadsheet, then you need to install Word or Excel (yes I do know about Office 365, but hear me out for a second) on either your desktop or laptop which in turn has its own Operating System (OS) – some version of Microsoft Windows or perhaps even some version of Mac OSX. Thus the need to have a guest OS which houses the application binaries and libraries is imperative! Docker challenges and changes that paradigm completely. You can now install the Docker Engine directly on a hypervisor (think of this as a host OS on a fat, beefy server that allowed you to install multiple guest OS’ on 1 physical server). The Docker Engine, which contains just the application and its dependent binaries/libraries, would then allow you to install and deliver the application to any user in a standardized, managed and centralized manner. It makes the guest OS redundant and revolutionizes the concept of application development, deployment and delivery.

What are the ramifications of this technology? Well, I can think of many.

Application Centralization: Today, IT organizations need to host multiple platforms just for application deployment and delivery – for instance there is typically a mobile device management (MDM) solution such as AirWatch or MobileIron for delivery and managing applications on mobile devices. In addition to that, organizations also need a software deployment platform such as Microsoft SCCM or LANDesk or perhaps even Altiris to distribute and deploy software. If you have a multi-OS environment with various OS’ deployments (such as Windows, Mac OSX and any version of Linux) then you need a separate tool for each of these OS’. Docker provides an answer to this dilemma – it can deploy the same standardized application to any of the above OS’ in a centrally managed manner. That is revolutionary!

The guest OS becomes redundant: In an enterprise environment, different guest OS’ are created with each hosting one or more applications in the role of an application server. Well, if applications can now be deployed centrally without the need for a guest OS, then what is the use case of an OS for application deployment or delivery? That concept can potentially change the game. Think about server hardware cost savings, think about guest OS license savings, and think about power and cooling cost savings because you have less hardware to support. This list is endless….

If you are curious about the potential of this technology and to get a first hand experience of using it, you can try it here.

One final comment on Docker – if you not a command-line person, then its finally time to brush up your command line skills (if you haven’t already done so!)

The Virtualization and Cloud Computing Offspring – Docker!