I see a lot of comparisons here to Docker, but IMO they solve two different use-cases. To me, Vagrant is most useful when I'm developing a project and want a reproducible yet easily mutable development environment. The Vagrantfile specifies packages to install and setup commands to run much like a Dockerfile, but the project source code directory is mounted as a volume so you can edit locally, re-compile & run remotely, etc. You could probably achieve something similar with Docker, but then you'd have to customize the mounts and deal with it ending up in different paths on different developers' machines & such. Vagrant and the ability to just clone a repo & run "vagrant up" is still very convenient.
> You could probably achieve something similar with Docker, but then you'd have to customize the mounts and deal with it ending up in different paths on different developers' machines & such.
Docker Compose can configure volumes via relative paths, e.g. './' and '../'