Stackato 3.6 Released with Support for Docker Images

Stackato 3.6 is here, and I'm going to show you something very, very cool: deploying a Docker image to a Cloud Foundry-based platform.

Nothing up my sleeve. No source code in my local directory, just the Stackato CLI client, my trusty Stackato 3.6 demo cluster, and a cool little web app someone has graciously published to the Docker Hub.

$ stackato push --no-prompt --docker-image sparklyballs/shout-irc --as shout
No manifest
Docker Image:  	sparklyballs/shout-irc
Application Url:   http://shout.demo.stacktest.io
Creating Application [shout] as [https://api.demo.stacktest.io -> ActiveTest -> dev -> shout] ... OK
  Map http://shout.demo.stacktest.io ... OK
Uploading Application [shout] ... Skipped, using docker image "sparklyballs/shout-irc:latest"
Starting Application [shout] ...
stackato[dea_ng]: Staging docker application sparklyballs/shout-irc:latest
stackato[dea_ng]: Located 17 images
stackato[dea_ng]: Downloading image 2fc25f9567a3
stackato[dea_ng]: Downloading image 8ae17d9bb816
stackato[dea_ng]: Downloading image 07efe1ba6b7a
stackato[dea_ng]: Downloading image b4d345255e1d
stackato[dea_ng]: Downloading image abd85a1bb9ed
stackato[dea_ng]: Downloading image c9284f1eb905
stackato[dea_ng]: Downloading image e1723d785e2f
stackato[dea_ng]: Downloading image 5a14c1498ff4
stackato[dea_ng]: Downloading image 2eccda511755
stackato[dea_ng]: Downloading image 2ce4ac388730
stackato[dea_ng]: Downloading image ec5f59360a64
stackato[dea_ng]: Downloading image 8254ff58b098
stackato[dea_ng]: Downloading image b39b81afc8ca
stackato[dea_ng]: Downloading image 615c102e2290
stackato[dea_ng]: Downloading image 837339b91538
stackato[dea_ng]: Downloading image 53f858aaaf03
stackato[dea_ng]: Downloading image 511136ea3c5a
stackato[dea_ng]: Located 1 tags
stackato[dea_ng]: Downloading tag `latest'
stackato[dea_ng]: Download complete
stackato[dea_ng]: Completed pulling docker image
stackato[fence.0]: Created Docker container
stackato[fence.0]: Prepared Docker container
stackato[dea_ng.0]: Instance is ready
OK
http://shout.demo.stacktest.io/ deployed

There has been a lot of buzz and hand waving in the cloud and Platform-as-a-Service (PaaS) space about Docker integration, but this is the real thing. You can download the VM now, set up your own platform, and start doing what I just did.

How did it do that?

Stackato has been using Linux containers for isolating hosted applications since its earliest Beta releases in 2011. The Cloud Foundry core developers picked up on this and developed their own container management system called Warden. Shortly after that, a little PaaS called dotCloud open sourced their container management software, which proved to be... somewhat popular.

When moving to the Cloud Foundry v2 code base, we had to decide whether to adopt Warden (now Garden) or to integrate Docker into the Cloud Foundry DEA. We chose the latter, in large part so that in the future we could allow users to do what I just did: deploy Docker images directly to the platform.

Docker Apps and Staged Apps

This new feature is called Docker Apps. Unlike staged apps which use Heroku-style buildpacks to assemble runtime dependencies and configure the container, Docker images are essentially pre-built stacks of filesystem layers. This has two important effects:

  • Fetching Docker images takes longer than pushing source code (the first time), but
  • Subsequent deployments of the same Docker image layers are very fast

This is the cloud platform version of the familiar trade off between package management and build-from-source approaches. With Stackato you get to choose which technique will work best for you in a given case. You may be more comfortable creating Dockerfiles and publishing images than figuring out how to get your app working using a buildpack.

Locking it down

If you're the administrator of the system, you might be concerned about the safety of running arbitrary Docker containers on a multi-tenant system. Unlike staged applications which all run in the same, trusted base container, users could deploy Docker images which expose a root user or do other less-than-completely-secure things.

With this concern in mind, we've made sure admins can limit the deployment of Docker apps to a group of trusted users, a list of trusted images and registry servers, or all of the above.

All the hard work you don't see

Docker Apps is the most visible (and exciting) feature in Stackato 3.6, but a lot of other work went on behind the scenes. The buildpacks in Stackato have all been updated, along with Ruby (2.1.5), and of course Docker (1.5). The release includes a merge from Cloud Foundry v205 and some restructuring of our code and build systems to help us keep in closer step with upstream releases and contributors in the community. Some of our customers will be happy to see the more fine grained permission controls available in the new Feature Flags.

Additional Resources:

This blog post was originally published by Troy Topnik on May 11, 2015 at ActiveState blog.