Over the last year and a half, if there is one thing that the world of IT, DevOps & Cloud would not have missed discussing about, that would be Docker. Docker is an app containerization technology that was developed by the erstwhile PaaS vendor DotCloud. In fact, DotCloud was so enamored about the discovery that they remodeled their entire business strategy around Docker, renamed themselves Docker, and sold off their PaaS business. And boy were they right!!! Docker is nothing short of an epidemic now and literally every company with any kind of interest in the world of IT, DevOps & Cloud have embraced it with open arms and it includes Google, Microsoft, Amazon, VMWare, and more.
In this blog post, I will take you through those points that throw light on why Docker indeed has created so much buzz and how a Docker architected platform is superior, offering tremendous cost and performance benefits to the end-user, over traditional cloud platforms using hypervisor-based virtualization.
I am not going to explain “What is Docker” here. There are a lot of articles on the web to explain that in more detail. In fact, docker has an "Understanding Docker" section that does the job pretty nicely. This post is just going to answer the question “Why a Docker architected PaaS platform is more superior?”
More bang for the buck:
Docker containers are lightweight compared to hypervisor-based VMs. They don’t have the concept of a guest OS for every virtual machine(VM) that is created and shares the OS resources. This means that more containers (2-3 times more) can be packed into the same host machine compared to packing VMs.
This higher container density aspect has a tremendous impact on the pricing front and offers the user more bang for the buck. In fact, in WaveMaker, we have achieved almost 80% savings on operational costs of wavemaker online by using Docker architected WaveMaker Cloud platform on top of AWS. I have to add, however, that the savings also includes benefits from WaveMaker Cloud’s additional optimizations on top of Docker containers. But how is it possible to achieve so many savings? Let me try to explain that with an example.
Every time you provision a new virtual machine instance on EC2 you'll need to pay for it. Imagine 1500 users are simultaneously logged onto wavemaker online and that would mean I need to have around 1500 EC2 instances provisioned. That is a tremendous waste of resources, especially if the application is light. But with containerization, we provide a container for every logged-in user and a lot of containers can be packed inside a single EC2 instance giving us this cost-benefit.
Easy updates to higher app versions:
With the lightweight Docker containers, release management of applications especially upgrading to newer app versions has changed. App version upgrades using old school approaches are not possible without server downtime and hence business continuity is lost.
With containers, a newer version of the app is provisioned in separate containers alongside the containers containing the current version of the app. Once the new version of the app has stabilized, the older version is phased out and its container de-provisioned. This approach is called the Rolling Upgrades. Rolling Upgrades would not be possible with such ease if not for Docker images (see Fig 2), a concept of snapshotting the container with the application and its dependencies.
Faster start-up times for horizontal scalability:
Lightweight Docker containers can be provisioned in a matter of milliseconds compared to a few minutes that are needed to provision a hypervisor VM instance. This is because Docker containers use a layered approach to the mounting file system. So instead of having to make full copies of whatever files comprise a container, Docker references back to existing files in a read-only layer,
This commoditization and instant availability of hardware resources have brought back the idea of horizontal scalability (see Fig 4) into focus again, where a new container can be provisioned instantly as the app load increases. This on-demand scalability is achieved in style and forever will change the way applications are architected for scalability.
Faster app delivery through continuous deployment:
Docker images are a way to snapshot the app and all its dependencies. Images are templates based on which containers are provisioned. These images are extremely lightweight and can be easily pushed to different app life cycle stages like development, testing, and production (See Fig 5). This facility along with the guaranteed reproduce-ability (explained in the next section) is a huge deal for release management because significant time goes towards dependency resolution in traditional development approaches.
A typical scenario in enterprise systems is to have scripts to deploy apps to a server. However, the script executions will vary across different environments that include parameters like time, hardware, software versions, etc. But by packaging your applications into containers you can be sure that they will run as tested wherever they are deployed. In summary, there is a guarantee of reproducing the same behavior wherever it is executed.
Enforces certified software usage:
Docker registries (see Fig 6) are components that hold Docker images. These are public or private stores from which you can upload or download images. The public Docker registry is called Docker Hub. Enterprise IT teams have the control to make available only IT-certified software components (as of Docker images) through these registries. This enforces certified software use across the organization.
Better error detection and recovery:
Isolated containers running individual apps also offer a targeted error detection and correction, without affecting other parts of the application. This becomes especially valuable considering that the lightweight containers offer you quicker error recovery options.
Consider that container C1 is up and running with image I1. A new version of the image I2 is created and C1 is provisioned again. However, due to an error that got introduced into the system, the app is down. Now the user can quickly snapshot the current state of the container that has the error and create a new image, say I3. Now C1 is re-provisioned with image I1, which used to work correctly before. I3 is sent across to the development team with all the logs and other details to be examined for issues and corrective measures. This is amazing since the developer has a snapshot of the problem from a live environment, allowing faster debugging of the issue.
With containerization providing a wide array of benefits covering cost, effort, and time, it is just a matter of time that cloud platform vendors are going to adopt containerization as the default architectural style.
WaveMaker recently released its PaaS software - WaveMaker Cloud - which is architected using Docker containerization technology. If you like to know more about the newly released product contact us or request a demo at wavemaker.