Docker trabaja con contenedores, Vagrant con máquinas virtuales. Docker crea contenedores Linux. Lo que quiere decir que si instalas Docker en windows, docker se va a descargar el kernel de Linux para funcionar. Y Vagrant,pues crea toda la máquina virtual según el sistema operativo.
Vagrant se utiliza normalmente para simular entornos de producción para tu app o website en cualquier computadora para reducir o eliminar bugs o errores.
Vagrant necesita VirtualBox para funcionar y normalmente es una forma más rápida de crear máquinas virtuales.
La principal diferencia es que docker solamente usa elementos del sistema que necesita para que tus contenedores funcionen. Y vagrant usa todos los elementos del sistema operativo, pues genera máquinas virtuales.