DockerCon Hackathon

This past weekend, I took part in the DockerCon Hackathon with teammates SidNikhil. It was an incredibly rewarding experience and worthy of my first post to the EC blog.  

How it works

There were 17 teams of 1-3 people.  We had 24 hours to create something showcasing Docker after which we would present our projects.  Entries were judged based on novelty, fit, efficiency, integration, transparency, presentation, and utility.  The top 3 teams received free passes to DockerCon and the opportunity to present their work at the conference.  Spoiler alert: Team Electric Cloud snagged one of the winning spots!

What we built

Orchestration is important to Docker as they strive to become an essential piece of the continuous delivery puzzle.  So, using our enterprise-class orchestration engine ElectricCommander was a no-brainer.  We decided to go for an end-to-end story taking a sample web application from commit to production.  We tied together the popular developer tools GitHub, Jenkins, and ReviewBoard.  And of course we took advantage of the speed and portability of Docker.  The solution consisted of two pipelines: one pre-commit and one post-commit.

Pre-commit pipeline

A developer launches a “preflight” pipeline to test their changes in isolation.  Their modifications are uploaded to the EC server which then overlays them on top of a clean source tree to simulate their commit.  After that, the application is built & unit tested via Jenkins, deployed to a new Docker container in the DEV environment, and a code review request is created in ReviewBoard.  The reviewer has a chance to view the running application along with the code changes.  If the request is approved, the developer’s changes are automatically committed.


pre-commit-pipeline

Post-commit pipeline

Via its continuous integration engine, EC detects a new commit to the GitHub repo and launches a “production” pipeline.  This pipeline builds the latest code, deploys it to the QA environment, and waits for manual testing.  If the QA team accepts the build, it is automatically pushed to PROD.

post-commit-pipeline

Pushing to PROD with zero-downtime was a fun challenge.  Two Docker containers sit behind a reverse proxy setup to enable a blue-green production environment.  If the blue container is active, EC starts a new container to serve as the green container, and vice versa.  A third container runs etcd which knows about the active container, confd monitors etcd for changes and notifies nginx if there is a change, and nginx reloads and points to the new container without dropping connections.  This post was a fantastic reference for the reverse proxy setup.

Presentation and judging

Each team had 3 minutes to present and everyone used Docker in a unique but innovative way.  We scored well in the “fit” and “transparency” categories and topped the field for “integration”, ending up with the 3rd-highest score and opportunity to present at DockerCon!  The various pieces of our project are published at https://github.com/electriccommunity/dockercon.

Hackathons are fun!

I’d never participated in a hackathon before and I haven’t coded full-time in a couple of years.  But I was lucky to be working with Nikhil & Sid who had in fact won their last two.  The Docker team put on a great event — several employees were around to answer our questions, and they kept us well fed and caffeinated :)

Tanay Nagjee

Tanay Nagjee

As a Software Engineer for five years, Tanay Nagjee developed several core features of a highly scalable orchestration/automation platform. A generalist at heart, he assumed various responsibilities and especially enjoyed working with customers on real world use cases. As a Solutions Architect and manager of the Solutions Engineering team, he tackles complex software delivery problems every day.
Tanay Nagjee

Share this:

Comments are closed.

Subscribe

Subscribe via RSS
Click here to subscribe to the Electric Cloud Blog via RSS

Subscribe to Blog via Email
Enter your email address to subscribe to this blog and receive notifications of new posts by email.