Containerized Cloud Applications
Cloud computing seems to have become a roller coaster of technology advancement – everyday there’s something new and improved, and every other day something fades away. There is certainly no shortage of new terms, acronyms and venture-backed products.
Also, cloud computing is no longer a simple concept or a single solution – it has rapidly evolved into a new and significantly expanded IT ecosystem. Competition among cloud providers is intense on many fronts, and yet many of the innovations seem to be older ideas re-visited.
Perhaps you’ve been wondering – what really is “the next big thing” in cloud computing? Application containerization, as popularized by Docker, may just be the answer.
Application and data portability is a fundamental goal for cloud computing. We would like cloud infrastructures and platforms to support business applications regardless of style, age, ownership, and location. As cloud service administrators, we also want the ability to “fire” one cloud provider and move to another with minimal risk, short delays, and no loss of data.
Openness goes to the heart of the service-oriented paradigm – applications should work with a standard suite of underlying services regardless of how, when or where they were implemented.
To date, virtualization has been the primary method used to isolate applications from the underlying hardware, software, and devices. Virtualization technologies (such as those provided by VMWare, Microsoft Hyper-V, KVM and Citrix XenServer) have become very popular, are widely deployed, and, in fact, were a major stimulus for cloud computing. The downside of virtualization has been the overhead of the hypervisor and the virtual machine’s guest operating systems. The lack of cross-platform standards has also inhibited true application portability.
Container technology appears to be a viable next step on the road to open clouds. The leading promoter of containerized applications has so far been Docker (the company).
Ships carrying standard cargo containers provide the usual visual analogy. In this scenario:
The ocean is the basic underlying infrastructure;
Ships are the cloud platforms;
Containers are standardized shipping units that can be mixed, re-arranged and moved; and
The goods in the containers are the arbitrary applications.
Containerization eliminates the baggage of virtualization by getting rid of the hypervisor and its VMs. A “container” is cloud-speak for a form of virtualization that facilitates efficient portability of applications. This can also be thought of as multi-tenancy at the operating system level.
The basic idea is that containers can be operated, administered, managed and provisioned in standard ways without having an intimate knowledge of the payload. Each containerized application runs on the ‘bare metal’ of the server plus a single, shared instance of the operating system.
It is important to understand that, even though containers may be relatively small and portable, there is additional infrastructure required for a production environment. In particular, many aspects of operational management need to be dealt with, including:
Monitoring and reporting of operational status;
Log (syslog) management;
Security and security management including user access control;
Disk and file system operation and management; and
Network management including firewalls, addresses and networks.
The objective, through industry-based open source development, is to standardize containers and enable their use with various systems. A standard container manifesto is provided here (although there appears to be an ongoing debate in this area). CoreOS, a Docker, Inc. rival, is aiming to set the standard for containers through their specification of an App Container and the related product called Rocket. App Container defines an image format, image discovery mechanism, and an execution environment that can exist in several independent implementations.