Thursday, February 22, 2018

IT 2.0: 1. Introduction to Containers

I have been intending to write about this set of technologies that is challenging the conventional model of computing for some time now. They are combination of Software Defined Data Center (SDDC), Public / Hybrid Cloud, Infrastructure As Code (IAC), Containers, Orchestration and Composable Infrastructure. Most of these technologies are disruptive. Organizations that do not embrace them face a real threat from business perspective since many in the competition may already be ahead of the curve and would be reaping the benefits.

As it goes in Formula One racing - If you have are not innovating and developing your car throughout the racing season, you are falling behind. This happens since every other competitor is innovating, testing and bringing new components to every race. Lack of development can actually be seen at the end of a season where team/s that begin the year strong might not be the ones who end it strong. The same analogy can be applied to IT. Lack of embracing these technologies the right way can have significant business impact.

I intend to provide clarity and simplify these technologies and talk about use case scenarios through "IT 2.0" series of posts. They will include strategy, architecture, implementation and operations perspective.

The first post is on Containers. What are containers and why should we care?

What are containers


Looking at virtual machines would be a good start to get to containers. virtual machines (VMs) can be represented as shown in the figure below where you would have one or more physical hosts running the virtualization Platform. Hypervisor kernel manages the platform and resources. Each application needs to run on a discreet operating system or a virtual machine. This model's primary focus is optimal utilization of all hardware resources.















A Container is stand-alone, executable package of software that includes everything needed to run it: binaries, libraries, application code and other settings. They can run on a bare metal machine (shown in illustration below), on a virtual machine or in cloud. Instead of one application requiring a full operating system and one unique virtual machine, multiple lightweight containers can be executed on a single VM / host.





Why Containers


Container architecture addresses many issues with the conventional virtual machines based application delivery and execution model and gives the development teams flexibility, reliability and agility.

Reliability: Same piece of code can run in development, QA, test, staging or production environment. The binary is packaged with all the dependencies. Because of this abstraction, version mismatch of underlying software between QA and Production breaking applications is very much a non-issue.

Portability: A developer can develop the code on their laptop and execute it in the on-prem, virtualized or cloud instance of the same container engine without having to make any code modifications. This enhances productivity and promotes flexibility by giving freedom to the development community.

Building block for DevOps: DevOps utilizes philosophies, practices, and tools that increases an organization’s ability to deliver applications/software at a rapid pace. Contrasting with the conventional way of application development the focus is on "agile" fashion. Containers - by providing ability to manage smaller code, portability, rapid deployment and execution becomes one of the foundations in an organization's journey to DevOps.

Rapid Deployment and Execution: Because of their size and architecture, containers can be deployed, started and restarted almost instantaneously. Moreover their restart does not require restart of a complete Operating System, giving a much quicker restart capabilities.

Promotes Cloud Native Functionality: One of main value of cloud computing comes from applications that are developed with its key tenets: loosely coupled, modular and horizontally scalable. Containerization promotes modularity by creating unique smaller containers for your various tiers of application rather than one larger container.  It also promotes quicker scaling using automation. Combined with cloud computing's ability to have presence in various regions across the globe, these attributes bring the true value of cloud to the community.

How to Build and Use Containers

We will focus on the most popular Container platform - Docker in the next post. I will go deeper into Docker architecture and demonstrate its implementation with simple use cases.

No comments:

Post a Comment