Jeg bruger Ubuntu til udvikling og implementering og har brug for at skabe et isoleret miljø.


Jeg overvejer enten Vagrant eller Docker til dette formål. Hvad er fordele og ulemper, eller hvordan kan disse løsninger sammenlignes?


Skal jeg bruge Vagrant eller Docker til at skabe et isoleret miljø?
===================================================================


Hvis dit formål er isolering, tror jeg, at Docker er det, du ønsker.


Vagrant er en virtual machine manager. Det giver dig mulighed for at skrive konfigurationen af den virtuelle maskine samt provisionering. Det er dog stadig en virtuel maskine, der er afhængig af [VirtualBox](https://en.wikipedia.org/wiki/VirtualBox) (eller andre) med et stort overhead. Det kræver, at du har en harddiskfil, der kan være enorm, det kræver meget ram, og ydelsen er måske ikke særlig god.


Docker derimod bruger kernel cgroup og namespacing via [LXC](https://en.wikipedia.org/wiki/LXC). Det betyder, at du bruger den samme kerne som værten og det samme filsystem.
Du kan bruge Dockerfile med kommandoen `docker build` for at håndtere provisioning og konfiguration af din container. Du har et eksempel på [docs.docker.com](https://docs.docker.com/) på hvordan du laver din Dockerfile; det er meget intuitivt.


Den eneste grund til at du kunne ønske at bruge Vagrant er, hvis du skal lave BSD-, Windows- eller anden ikke-Linux-udvikling på din Ubuntu-boks. Ellers skal du gå efter Docker.


Jeg indleder mit svar med at indrømme, at jeg ikke har nogen erfaring med Docker, bortset fra at jeg er en ivrig observatør af det, der ser ud til at være en rigtig smart løsning, der vinder meget indpas.


Jeg har en anstændig mængde erfaring med Vagrant og kan varmt anbefale det. Det er helt sikkert en mere tung løsning i form af at den er VM-baseret i stedet for LXC-baseret. Jeg har dog fundet ud af, at en anstændig bærbar computer (8 GB RAM, i5/i7 CPU) ikke har problemer med at køre en VM ved hjælp af Vagrant/VirtualBox sammen med udviklingsværktøjer.


En af de rigtig gode ting med Vagrant er integrationen med [Puppet](https://en.wikipedia.org/wiki/Puppet_%28software%29)/[Chef](https://en.wikipedia.org/wiki/Chef_%28software%29)/shell scripts til automatisering af konfigurationen. Hvis du bruger en af disse muligheder til at konfigurere dit produktionsmiljø, kan du skabe et udviklingsmiljø, der er så tæt på identisk som du kan komme, og det er præcis, hvad du ønsker.


Den anden gode ting ved Vagrant er, at du kan versionere din Vagrantfil sammen med din applikationskode. Det betyder, at alle andre på dit team kan dele denne fil, og du er garanteret, at alle arbejder med den samme miljøkonfiguration.


Det interessante er, at Vagrant og Docker faktisk kan være komplementære. Vagrant kan udvides til at understøtte forskellige virtualiseringsudbydere, og det kan være muligt, at Docker er en af disse udbydere, der får understøttelse i den nærmeste fremtid. Se <https://github.com/dotcloud/docker/issues/404> for nylige diskussioner om emnet.


[Vagrant-lxc] (<http://fabiorehm.com/blog/2013/04/28/lxc-provider-for-vagrant/>) er et plugin til Vagrant, som lader dig bruge LXC til at levere Vagrant. Det har ikke alle de funktioner som standard Vagrant VM (VirtualBox) har, men det skulle give dig mere fleksibilitet end docker-containere. Der er en video i linket, der viser dens muligheder, som er værd at se.

