At DockerCon EU 2018 in Barcelona, Matt Butcher, Principal Engineer at Microsoft and inventor of Helm, introduced CNAB, Cloud Native Application Bundles, a packaging format for distributed applications, along with Duffle, a CLI tool to run these bundles.
The introduction came during a “secret” breakout session, a DockerCon tradition, at the end of Day 1 where only a handful of engineers were present. While a more official announcement will come during tomorrow morning’s general session, here is what we know.
An RPM (or MSI) for distributed applications
Cloud Native Application Bundle, or CNAB (pronounced sea-nab) for short, is a cloud-agnostic packaging format for a wide range of distributed applications. The bundle contains a bundle definition and an invocation image that installs the app.
The bundle definition is a file called
bundle.json, or a signed
bundle.cnab equivalent. This file contains basic metadata about the bundle, such as its name, version, description, and keywords, but also where to find the invocation image and what user-overridable parameters are available.
The invocation image is an installer program that will take care of installing, upgrading, and/or removing the components that make up the distributed application. These components may be containers, functions, VMs, IaaS and PaaS layers, or service frameworks, although the format is open to more component types.
CNAB makes the distinction between thin and thick bundles. Thin bundles consist only of the bundle definition file, while thick bundles are packaged archives that contain both the bundle definition and all the necessary invocation images. Matt said that thick bundles would be particularly useful when wanting to use CNAB on air gapped systems.
An open-source standard
Matt made clear that Microsoft already has several use cases for CNAB, but that they would much rather have the community on their side when developing the tooling required to make CNAB truly useful for all. He is aware that throwing a new standard out there is not enough for it to stick, which is why Microsoft partnered with Docker, Bitnami, HashiCorp, and CodeFresh for this project.
CNAB’s spec is now fully available on Github, as well as some example bundles and a bundle installer called Duffle. While there is still much tooling missing for CNAB to be integrated into many developers’ workflows and deployment strategies, many will rejoice at the news that there is a VS Code extension for Duffle.
In a strategic move, Docker’s new
docker app tool implements CNAB and allows users of Docker Enterprise to package their applications in a format that can be run by Duffle.
What about other Cloud Native installers?
Matt Butcher, also known as Technosophos in tech circles, is also the inventor of Helm, a package manager designed specifically for Kubernetes. Since CNAB is meant to become the standard for packaging Cloud Native applications, this brings a question to mind: how do CNAB and Helm charts relate? Which is why I asked him.
His answer was simple: both can and should coexist. An application bundled in the CNAB format could very much use Helm to install parts or all of the application. In fact, Matt claims that this approach could solve some issues with Helm installs, because it would allow developers to specify which version of Helm to use when installing a specific version of their application with a specific version of their Helm chart.
When Matt and his team finished working on Helm 2 is when they realised that something like CNAB could be the answer. He claimed that they are going to keep working on Helm 3 regardless of how CNAB does as an open-source project.
While we wait for a more official and less technical announcement during tomorrow morning’s general session, the best we can do is take a look at what has been released so far. Se here is a list of what we found: