Two weeks ago I wrote a blog post arguing that DevOps is not just about culture (which, of course, is at the heart of DevOps) but also about aligning the right tools with the culture. Even though I don’t claim a single prescription for handling DevOps, some felt I implied specific tools to be DevOps tools. I definitely agree with industry thinking that the needs of different organizations are different and no single tool can be offered as a prescription for DevOps. However, I still stand by my argument that one needs to align the right tools with the culture to reap the full benefits of DevOps. Any non-alignment or mis-alignment will lead to more pain instead of helping IT.
Having said that I want to take on the idea that only configuration management tools are the right DevOps tools. In fact, I would go a step further and claim that you need to look beyond basic configuration management tools to fully implement DevOps in your organization. Early discussion on the DevOps focussed on configuration management tools because of the early success of VM based clouds. Also, most of the DevOps punditry came from Ops focussed people. With increasing enterprise adoption of PaaS and with the emergence of Docker as the industry standard for application packaging and portability, it is important for us to broaden the toolkit IT uses to implement DevOps successfully inside their organization.
Docker and PaaS as enabler of DevOps
Docker is fast emerging as a standard for application containers and an active ecosystem is developing around the open source project. In the InfoQ Virtual Round Table, the moderator asked the panelists about the relationship between PaaS, Containers and DevOps. I gave the following response:
For me, it is pretty simple. PaaS is the enabler of DevOps and Containers are the underlying standardized components
This is exactly the point I want to highlight in this post. We need to look beyond Virtual Machines and Configuration Management tools for planning the DevOps strategy. Before someone pounces on me, let me be clear, I am not saying we should not use configuration management tools. I’m arguing that we look beyond those tools and select the appropriate tools. With Virtual Machines, config management tools helped establish DevOps culture by establishing similar environments from development to production. However, as pointed out in this article, things can go astray or become unnecessarily complex. Any mis-alignment of shared goals due to such factors limits the benefits of DevOps.
It is easy to replicate environments across development, testing, QA, and production with basic configuration management tools but it becomes unnecessarily complex when you try to manage the lifecycle of the middleware components or the applications using the same tools. I believe it is beneficial to think in terms of “better encapsulation” instead of vanilla virtual machines, like containers. This is where Docker comes into picture with a lightweight open source application container. Docker, along with configuration management tools and PaaS tools, will can emerge as the backbone DevOps strategies. It will do a better job of ensuring consistency across development, testing and production environments without increasing complexity.
This is exactly why I have argued that Modern Enterprises need not be unnecessarily complex. This is exactly why I like it when someone talks about Docker as a framework for DevOps. In short, as you plot your DevOps strategy, broaden your search for tools and consider tools offering higher order abstractions while also enabling seamless collaboration including this one. Fortunately, DevOps doesn’t stop with culture and a few VM-centric tools.