Docker Containers as the new Binaries of deployment

In prep for .NET Conf, I was asked by Vaso to explain some of the benefits of containers. I was talking with one of our engineering leaders in Azure, John Gossman about how we view containers more broadly. Our Azure Container Service is our Microsoft Container Orchestration solution, offering Container as a Service (CaaS).

We'll be adding container support to Service Fabric, which we think of as a Micro service PaaS.

When people think of containers, are they a specific app pattern, or the new app deployment model, for all app solutions?

To answer the benefits of Containers compared to VMs, here's an overly simply answer:

  • Containers spin up in seconds, compared to several minutes of a VM
  • Containers provide much more density, allowing you to run many more containers on a single VM, compared to how many VMs you could run on a host OS. This is achieved through a shared kernel model
  • Containers are designed to be instanced multiple times, from a single Image - in the same seconds metric
  • Docker hosts have a caching model for images, allowing them to spin up quickly
  • Containers are deployed using a Docker Registry,which handles a layering system, allowing only the deltas to be deployed across the network

With these primitives, a host of new scenarios are available, such as:

  • Instancing containers on demand for tasks, rather then leaving them running all the time.
  • Auto scaling, self healing, in seconds.
  • Blue/Green deployments, that don't require you to keep the old instances running.

Today, we think of deploying code as binaries. We compile the code, we deploy those binaries to environments we prep to accept those specific binaries, and update the environment for each app/service version change we make.

If we look forward, we see containers as the new binary. You build/compile your app as a container (Docker) image. You then deploy your app/image to generic environments. Today, these are Container Orchestration systems, like ACS with Mesos and Swarm. Kubernetes, etc. If you look forward, when doing PaaS solutions, like WebSites, App Services, any cloud deployed solution, why would you deploy individual binaries? Wouldn't it be nice if containers were the new binaries of deployment?