I have been a massive Vagrant fan since I was introduced to it in 2013/2014. To me, it is the first time I stepped into the world of DevOps and see the huge difference it made to a team. Before Vagrant, ensuring team member’s machines and the server environments software versions is a huge headache. We always ran into issues where code works fine on one person’s computer and ends up breaking on another machine. This is terrible news when the whole deployment process is meant to be automated. My Team had no choice but to increase the amount of manual testing done on the website to reduce these kind of issues getting through to production.

With the introduction of Vagrant, we were able to easily manage everyone’s software version since everyone build their VM (virtual machine) based on the same configuration. This means software updates can be managed easily, everyone just need to rebuild their local VM using the updated config.

So, what is Docker? Docker is not really an update to Vagrant, but instead of concept of VM. Since most of the time we don’t need a full Linux VM to run our software. So Docker allows the ability to run a Docker container that is a stripped Linux OS, supporting its core functionalities but giving the user ability to install everything back if they wish. Docker doesn’t quite replace Vagrant, since Vagrant was designed to be used for local development. Whereas Docker is aimed at server level optimisation. Of course, there is nothing stopping you from using Docker to do local development. Since the two products are meant to solve completely different issues, so I don’t think they are in direct competition. But over time, the popularity of Docker may impact Vagrant.

Personally, after moving away from PHP backend and more into Node.js I have also moved away from Vagrant. Maybe Docker will be more popular than Vagrant in the future, but for now neither is really my top choice.