Timeline

At first I used chef to provision our servers. So KitchenCI comes in the way for on-push testing of the cookbooks. The Jenkins/KitchenCI was installed on a VM so I had to use a docker driver (virtual machine inception is not a good idea). And I was pleased to see how fast and leightweight the testing process was.

I decided to extend docker usage (but not for microservice as it wasn’t the end goal of my mission). Knowing docker was reliable for it’s build-ship-deploy capabilities I started to build public images for our required engines (reverse-proxy, oracle java, neo4j cluster) and used bind mounted volumes for project-specific versioned packages (configuration, jar, database).

Now each deployment consist of 1) removing all existing packages and containers and 2) deploy the new ones. Immutable infrastructure here we come.

At this point I stopped using Chef to provision applications engines as they are now self-contained thanks to docker. I just kept it to ensure basic server state : users, pubkeys, ntp…

It’s about march 2015, swarm 0.1 is released (checkout the last 1.1 slides from core developer Victor Vieux) and I decided to take look at it. Basically at this time and version, I saw swarm as a docker proxy : it implements almost all docker server endpoints (required to forward the requests), and add some clustering features like discovery, filters or strategy.