To Docker or not to Docker? That’s the question.

To Docker or not to Docker? That’s the question.

Sounds like a very innocuous question. But answering this question would have a huge impact on overall IT strategy and Cloud transformation initiatives.

There is a more or less wide acceptance and agreement on one topic across all industries, CIOs and CTOs. Cloud is the future. The question that still remains to be answered is what type of Cloud solution.

To put this in perspective, we may have to go back in time by about a couple of decades.

We started off ordering our own hardware in our own data centers for running the applications. This would involve various aspects of application development, deployments and operations tasks starting from DB to network switches. That came with complexities of managing many layers of development, operations and support teams.

We then started realizing that lot of our hardware is extremely underutilized and sitting in our Data Centers while we pay for its usage. Then came the concept of virtualization. Virtualization gave us better utilization of our hardware but still came with lot of operational and ‘business as usual’ support and associated costs.

We then moved to cloud environments to optimize this further. With IaaS, you have ability to provision, orchestrate and scale infrastructure needed by your application teams with a click of a button.

Concept of PaaS goes one step further and builds on top of IaaS. PaaS provides ability for spinning up runtimes like JBoss, Tomcat, MySQL etc. at will and at scale as needed.

Then came Containers. The concept is based on Linux containers. This is a little bit of an odd ball. Like PaaS, Containers need IaaS to run. The most popular is Docker. Containers provide many, but not all the services that PaaS provides. However, there are subtle but key differences that we must understand to make right choices.

PaaS platforms provide full functional runtime environments. The PaaS platform takes care of runtimes, their orchestration, scaling, routing of the traffic, patching of the software and security. PaaS is really good choice for doing standard and fast application development. Application teams can focus on developing business logic and not worry about managing run times.

On the other hand, Containers work on the concept that everything that an application needs from code, runtime, libraries, and configurations are packaged and deployed as images. Container, as name suggests, is self-contained unit of compute power and application code.

Communication with outside world is generally over ports and using protocols. However, that’s just a piece of the bigger puzzle.  With the advent of microservices and cloud application architecture; to deploy and operate Containers, we need container orchestration tools like Kubernetes, Docker Swarm, Mesosphere etc. Coupled with right Orchestration tool, Containers could become very powerful mechanism to build, deploy and operate your apps.

So far so good. Now for the question, what’s the difference between PaaS and Containers? Why should we choose one over the other?

Few points to ponder to help make the determination

PaaS

  1. PaaS by its very nature gives you out of the box runtimes. Runtime versions, patching and any libraries that you are using are managed by a PaaS platform provider. If you want different versions of run times and libraries, you may have challenge on your hands.
  2. Patching and upgrade schedule is driven by the PaaS provider.
  3. Providers may be providing many value add services and features to engage customers and have more lock-in.
  4. PaaS is not a good choice for complex and custom product deployments.
  5. Some of the benefits include ease of use, fast application development, lower barrier of entry.
  6. Less initial investment and efforts.

Containers

  1. Containers need other orchestration tools for enterprise scale operation.
  2. While you have full control on runtime and dependent libraries of your application, because you are managing the application run times, you are responsible for a runtime’s lifecycle management.
  3. The key benefits include full control of your application right from runtimes to any dependent libraries.
  4. The biggest benefit may be avoiding vendor lock-in. You can be cross platform and move your workloads easily across different clouds.

Conclusion

If you are doing standard run of the mill application development and do not bother with using any other value added services, PaaS is your choice.

If you need full control on application lifecycle management, reduce vendor lock-in and need custom product deployments, you may be better off using Container solutions.

Well, I don't quite agree on Prashant's picture showing Docker vs. Paas. Many PaaS, such as CloudFoundry, include their own container and orchestration mechanism (Bosh, Diego, etc.). Docker is just another one, and Docker (the company, not the OSS) is just building another PaaS. Same for serverless platforms BTW, they are just another variation of PaaS. Is Docker nice ? Yes, absolutely, and most PaaS now support it, using Kubernates or an equivalent orchestration mechanism. Does Docker solve every problem. I am not sure, at least for now. Isolation, networking, and reliability are still issues. A single Linux engine is still not as reliable as an hypervisor, and it's still not straightforward to "dockerize" any application. Prashat's picture also opposes Docker as "micro-services" against PaaS. That's another arbitrary (and unfair) opposition. Most, if not all, PaaS provide micro-services capabilities, I would enev say better that Docer, where you have to dedicate an entire container to a single micro service. CloudFoundry, for instance, is entirely based on Micro-Services. With CloudFoundry you just compose and build micro-services, without the need for taking care of containers. The level of abstraction is even higher.

Like
Reply

Thanks for your insightful comments Ashley.

Like
Reply

This comparison may have been the case with the previous generation of PaaS platforms, but things have changed dramatically in 18months: - It now seems somewhat artificial to pit 'Containers' per se against 'PaaS' services. For example, OpenShift R3 is fully built on Docker and Kubernetes container service and orchestration (precisely what is needed for new micro-service application architectures). - Also, version diversity is precisely one of the strengths of Docker (and hence OpenShift), as applications and the diverse versions of their artefacts are built as a self-contained Docker image. Diverse images can maintain diverse versioning. - The orchestration provided by Kubernetes renders the otherwise complex container lifecycle, interconnection and image versioning streamlined. Hence, whilst there will be some very specific types of product developments that benefit from a fully self managed container approach, in most cases this level of control will not be worth the trade-off in terms of management overheads.

Like
Reply

Nice. Good to see this article. For corporates who already have huge set of applications in complex set of infra/app server combinations , Docker cane help to get on the cloud wagon faster.

To view or add a comment, sign in

More articles by Prashant Musale

Others also viewed

Explore content categories