I was a Docker skeptic. The idea of containers was not particularly new (BSD Jails, Solaris zones, etc.) and it didn’t seem to be enough to sustain a company or a new way of working.
I’ve changed my mind.
Spending time with Docker during Cloud Field Day about a month ago opened my eyes to the larger ecosystem that Docker is building, and that others are building around it. There is so much more to Docker than just the idea of immutable containers.
For a start, Docker made using containers easy. That’s no small feat for a tricky piece of technical infrastructure. Making it easy, and specifically easy for developers, to use removed a lot of friction that was no small contributor to the pain of other, earlier methods. It gave developers are really simple way to create a fully functional development environment, isolated from all other dependencies, with which to work.
Now you could set up a common target platform for all developers to deploy into, and then containers wouldn’t have much appeal. But as anyone who’s tried to do that here in the real world, you would know that it’s a ghastly nightmare. Trying to get humans to agree on things is tricky at the best of times, but to have all of the developers in your organisation deploy to a single target platform? Good luck with that.
What Docker did is create an easy to use way to force a common target platform — the Docker engine and related pieces — but to decoupled everything else from what developers wanted to do. It’s also modular, so you can mix and match components in the stack as they need to change, and it manages many of the dependencies for you.
It’s the forcing function that I’ve most come to believe in. Humans, myself very much included, are abysmal at self-discipline. We all know documentation should get written, and that we shouldn’t have that extra slice of (of so delicious) cake, but do we do what we should? Of course not! There are whole industries that depend on humans continuing to be awful at self-control.