March 24, 2014

Getting started with Docker

During the weekend I was looking a bit at Docker, which is a way to create containers to run your code isolated from the rest of the machine, while still using the common libraries and deployment of the host operating system.

In my case the benefit could be important. I am leaning more and more into the micro server architecture, and the result is that I have around two orders of magnitude more servers to deploy, monitor and maintain.

I do most of my development using Vagrant, which lets me emulate a real life deployment, up to a point. In many cases, I will develop all the services in the same guest machine, but at deployment I might have a couple of machines keeping most of the servers, and then a load balanced layer for the busier services.

In theory I can emulate that with Vagrant, but in practice if I run more than two or three instances my laptop starts to crawl. Then although I test that everything works, going into production means a few sessions of debugging when things are different from theory to practice.

The idea I get from Docker is that using it I should be able to create a machine for each server without killing my laptop, and that would sort the problem of adding a load balancer in my deployment.

To make my life easier, I did some Fabric scripts to deploy Docker in Vagrant. We will see how it works during the week, at the moment it is just following the details in the installation page, but I didn’t do any real deployment (only a hello world).