Docker Up!

March 27th, 2015

This is a cross-post from the Inquisi Blog at Startup Term, the new immersive pilot program taking place at Knox College during the spring of 2015.

Today the Inquisi development team got their local environment up and running with Docker! This post will cover Docker, what it is and why it's useful, and what it means to the development team.

For those of you who don't know, Docker is a new software tool that provides a way of managing the environment in which an application runs on a machine, and like most things having to do with application environments, it's very hard to learn without some background knowledge. The development team spent the first two days of Startup Term wrestling with Docker and its cousin, Docker Compose, to create a portable, reproducible application environment.

The idea behind Docker is to make sure that 1. the same code is running in the same way on all machines (local, build, test, staging, production) and that 2. new environments can be created with a minimum of effort.

Modern web applications have many pieces that need to be orchestrated properly in order for the application to be successful. These pieces can be managed individually by running specific commands on specific machines in a specific order (all produced by the web developer or devOps person and dependent on their ability to remember them). By handling each piece on its own, there is little overhead to the process as each piece needs only to interface directly with those around it — no middleman or adapters required.

Managing pieces individually can work for small projects, but a few problems occur once things start to become larger. Firstly, this style of management is a burden on the developer or devOps person. What happens when they can't remember what they did n weeks from now? How much time will it take them to set up new environments? What happens when they leave the team? Secondly, managing individual pieces this way presents a few technical challenges. How should they be salvaged when they fail? Can these pieces be used the same way everywhere? Are their interfaces stable and reliable?

Docker is built to solve the problems that come up when managing the parts of an application individually. It allows these parts to be packaged into portable 'containers' that have standard methods of interaction.

Fortunately, because Inquisi is a new product, the development team has been able to adopt Docker in the prediction that a little time spent getting prepared today will save lots of time managing the application tomorrow.

Right now the truthfulness of that statement remains unknown. What we do know is that we've spent two days configuring an application rather than producing user stories or working on features. Two days spent learning something that might be useful.

But even if Docker isn't all it's cracked up to be, we all know something we didn't know before. Isn't that the point of this experience, anyways?