This post is the fifth in the series “Containers Power Agility and Scalability for Enterprise Apps.” To view the series from the beginning, click here.
One of the great promises of cloud computing that’s never been met is making it easy for organizations to move workloads between multiple clouds. Each cloud computing environment is built on top of a unique implementation of a hypervisor. Unless each cloud is built using the same hypervisor, moving workloads between, for example, a local private cloud based on VMware to a public cloud running hypervisors built by Amazon Web Services (AWS) requires IT organizations to refactor their applications. The only way around that issue is to package application workloads in Docker containers that can be deployed on top of multiple instances of different hypervisors running on multiple types of Linux operating systems.
Docker containers enable that portability by providing a lightweight mechanism to encapsulate all the libraries, configuration files, and application binaries needed for an application image to run. That inherent portability means a Docker image can run anywhere, including on multiple hypervisors, within a platform-as-a-service (PaaS) environment; or on bare-metal servers running, for example, container orchestration software such as Kubernetes as an alternative to relying on traditional hypervisors.
But containers are only a means to much larger cloud computing end. Docker containers are essentially providing the foundation for an emerging Cloud 2.0 platform, enabling IT organizations for the first time to mix and match public and private cloud computing resources within the context of a highly distributed hybrid cloud computing environment, as they see fit.
The real goal when it comes to cloud computing has never been to simply replace on-premises IT infrastructure with an external service provider. In fact, cloud computing as defined by the National Institute of Standards (NIST) makes it clear that cloud is a model for delivering IT resources rather than a specific platform.
Specifically, NIST says, “Cloud computing is a model for enabling ubiquitous, convenient, on-demand network access to a shared pool of configurable computing resources … that can be rapidly provisioned and released with minimal management effort or service provider interaction. The cloud model is composed of five essential characteristics, three service models, and four deployment models.”
The five essential characteristics of a cloud are:
- On-demand self-service
- Broad network access
- Resource pooling
- Rapid elasticity or expansion
- Measured service
The service models span software, platform, and infrastructure; and four deployment models consist of private, community, public and hybrid.
But like all things in IT, cloud deployment models are fluid. Thanks to the rise of edge computing, we’re starting to see how a new generation of distributed applications in the Cloud 2.0 era will blur the lines between deployment models. Internet of Things (IoT) applications, for example, require data to be processed in real time on a local IoT gateway, close to where data is being generated.