Hacker News new | ask | show | jobs
by hinkley 1374 days ago
What is your theory for why Docker won and Vagrant didn't?

Mine is that all of the previous options were too Turing Complete, while the Dockerfile format more closely follows the Principle of Least Power.

Power users always complain about how their awesome tool gets ignored while 'lesser' tools become popular. And then they put so much energy into apologizing for problems with the tool or deflecting by denigrating the people who complain. Maybe the problem isn't with 'everyone'. Maybe Power Users have control issues, and pandering to them is not a successful strategy.

4 comments

What turned me off from Vagrant was that Vagrant machines were never fully reproducible.

Docker took the approach of specifying images in terms of how to create them from scratch. Vagrant, on the other hand, took the approach of specifying certain details about a machine, then trying to apply changes to an existing machine to get it into the desired state. Since the Vagrantfile didn't (and couldn't) specify everything about that state, you'd inevitably end up with some drift as you applied changes to a machine over time -- a development team using Vagrant could often end up in situations where code behaved differently on two developers' machines because their respective Vagrant machines had gotten into different states.

It helped that Docker images can be used in production. Vagrant was only ever pitched as a solution for development; you'd be crazy to try to use it in production.

Docker is not fully reproducible either. Try building a Docker image from two different machines and then pushing it to a registry. It will always overwrite.
Ooooh, “it will always overwrite.”: this is like saying an indirect way of saying that your executable will behave exactly the same if it got overwritten (by a same set of bytes).

Good one.

Dockerfiles pervasively use things like `apt-update` and that makes them not reproducible.

Even of your image pins apt or yum, images you depend on likely don't.

Docker is repeatable, not reproducible.

I’ve read bug threads in the moby GitHub where they reject a feature because it’s not repeatable, while people point out that Docker files start with apt-get so they aren’t repeatable from layer 2 anyway. The team members don’t seem to hear them and it’s frustrating to watch.

Images are repeatable. We like repeatable images. That’s enough for most of us. Don’t break that and we’re good. Just fix build time bullshit please.

Yep
The easier it is for a technology to accidentally make it into production, the more popular it will be
Vagrant images are always huge. But docker images are small. You can deliver and share docker images with ease.
Vagrant never targeted production so not much money/resource/interest invested?