Earlier this June, I gave a talk at DevOpsDays DC about a tool called Vagrant. Vagrant is an application that simplifies the process for setting up a virtual machine, and is compatible with Windows, Mac, and Linux operating systems.
The general goal of the DevOps movement is to improve collaboration and synergy between the Development and Operations infrastructure in an organization. My talk focused on a simple DevOps challenge: Use automation to make your development environment as similar as possible to the production environment. The benefit is reduced risk of surprises in production and reduced overhead when onboarding new developers.
I proposed Vagrant as an ideal solution for solving this problem. Vagrant integrates with the popular provisioning tools, such as Puppet, Chef, Ansible, Docker, and Salt, to deploy your development environment the exact same way as production.
I only had five minutes to talk, so I didn’t have time to get too in depth. There was one topic that I wish I had time to address: How does Vagrant compare to Docker for development environment automation?
Docker is a relatively new tool in the community. It takes advantage of LXC capabilities in Linux to create very lightweight, and isolated, software containers. Essentially, Docker solves the exact same problem I addressed with Vagrant: Create one automated environment, and use it in both production and development. Compared to Vagrant, Docker with Docker Compose is significantly more lightweight and quickly deployed.
Given that, I was not surprised when a developer at the conference asked, “why are you talking about Vagrant for a solution that Docker does better?”
The answer is simple: Many organizations are not ready to adopt Docker.
Small organizations may be able to refactor their entire infrastructure to work with Docker quickly. Most medium to large organizations aren’t so lucky. Ignoring the technical challenges of changing a production pipeline, you also have to consider procurement processes for training and support, security evaluations, etc. In fact, there’s a decent chance your current baseline operating system doesn’t even support Docker.
If your production system is already using provisioning software (even shell scripts!) the process for porting that to a Vagrant environment is much simpler. Additionally, the bureaucratic hurdles should be relatively non-existent, as you aren’t actually changing anything in production.
The reality is that Docker and Vagrant are both suitable tools for creating a development environment that closely reflects your production environment. If you’re stuck between these two options for your organization, you can pick either one or use both. Regardless of your choice, I encourage you to embrace the challenge of designing an automated development environment that matches production.
Want to hear more of my talk? Check out the video and slides
Do you use Docker or Vagrant? Tell us more about your experiences here!