Introduksjon til Vagrant

Oversikt

Vagrant lar deg enkelt administrere og kontrollere flere virtuelle maskiner. Den er bygget på toppen av VirtualBox og VMWare, og det gir mange spennende muligheter. Du kan opprette isolerte utviklingsmiljøer, eksperimentere med nye produkter og teknologier, installere nye versjoner av eksisterende pakker, lage ditt eget private datasenter på den bærbare datamaskinen og kjøre forskjellige operativsystemer. Alt som er tilgjengelig i en lett å administrere og helt trygg silo som ikke kan forstyrre dine hovedaktiviteter og operativsystem. 

I denne veiledningen vil jeg vise deg hvordan du setter opp Vagrant og begynner å utforske de mange mulighetene det gir.

Vagrant har nylig lagt til støtte for Docker-beholdere også, men jeg vil ikke diskutere det i denne opplæringen.

Installasjon

  1. Last ned gratis VirtualBox for operativsystemet ditt fra VirtualBox nettsiden.
  2. Etter nedlasting, bare kjør binær og installer den.
  3. Last ned Vagrant.
  4. Igjen, bare kjør det binære for å installere det.

Initialiserer Vagrant

Vagrant er et kommandolinjebasert verktøy. Når installasjonen er fullført, åpne et konsollvindu og opprett en ny katalog kalt 'vagrant_intro'.

cd ~ mkdir vagrant_intro cd vagrant_intro

Dette vil bli din arbeidskatalog fra nå av. Inne i vagrant_intro-katalogen, skriv inn:

vagrant init ubuntu / trusty64

Du bør se følgende tekst:

En 'Vagrantfile' er plassert i denne katalogen. Du er nå klar til å "vagrant up" ditt første virtuelle miljø! Vennligst les kommentarene i Vagrantfilen samt dokumentasjon på "vagrantup.com" for mer informasjon om bruk av Vagrant. 

Den genererte "Vagrantfile" er en Ruby-fil som styrer dine [en eller flere] virtuelle maskiner. Det er en ganske stor fil med mange kommenterte alternativer. Jeg vil gå over de viktigste senere, men la oss prøve det først. Type: vagrant opp.

Dette vil føre til at Vagrant laster ned en forberedt virtuell boks med 64-biters Ubuntu 14.04 (trusty) utgivelse. Det vil ta en stund (flere minutter) og spytte mye tekst på skjermen. Mens Vagrant er churning, la oss snakke om hva en VM er i praktiske termer.

Én visning (som jeg vanligvis vedtar) er at VM simulerer en ekstern server. Du bør kun kommunisere med det via nettverksgrensesnittet. Dette er spesielt nyttig for testing av distribuerte systemer, der du ikke bør dra nytte av noen spesielle VM-vertsgrensesnitt fordi de ikke vil være tilgjengelige på ditt produksjonssystem. Når du bruker denne modusen, kommuniserer du normalt med VM over SSH (muligens med et verktøy som Ansible).

En annen visning, som også er helt riktig og gyldig, er å tenke på VM som et annet OS som kjører på din lokale maskin. Denne visningen er nyttig hvis du vil utvikle deg direkte på ditt mål-OS. 

For eksempel er et veldig vanlig oppsett å ha utviklere skrive sin kode på en Mac ved hjelp av Mac OS X, men distribuere til et Linux-produksjonsmiljø. Hvis du vil sørge for at koden du utvikler på Mac, kjører riktig på Linux uten å måtte distribuere til en ekstern server, kan du dra nytte av synkroniserte mapper hvor du leser og skriver filer på verts-operativsystemet (vanligvis Mac OS X) og få dem umiddelbart tilgjengelig på gjesten OS (vanligvis Linux). 

Dette faller trinnet "distribuere" fra redigeringsutplasserings-test-syklusen når du arbeider med eksterne systemer. Det fjerner også behovet for et ekspansivt scenemiljø som er en delt ressurs og må administreres nøye over alle utviklere. Med en lokal VM vil ingen bryte miljøet ditt, og du kan eksperimentere så mye du vil uten å bekymre deg for å bryte andres kode.

Du kan selvfølgelig bruke begge synkroniserte mapper og fortsatt SSH i din VM. Det finnes andre alternativer som slører grensene som portkartlegging.

Vagrantfilen

Her er en fjernet versjon av Vagrantfilen med noen av de viktigste alternativene:

Vagrant.configure (2) do | config | config.vm.box = "ubuntu / trusty64" config.vm.network "forwarded_port", gjest: 80, vert: 8080 config.vm.network "private_network", ip: "192.168.33.33" config.vm.synced_folder "~ / vagrant_intro / data "," / vagrant_data "machine.vm.hostname =" gigi.playground.local "

Syntaxen er Ruby, som gir deg stor fleksibilitet hvis du vil legge til conditionals og sløyfer. Dette er spesielt nyttig hvis du bruker Vagrantfile til å styre en klynge av virtuelle maskiner.

Koble til VM

Du kan koble til din løpende VM ved å skrive: vagrant ssh.

Dette vil starte en SSH-økt, og la deg fiksle med din VM interaktivt.

Velkommen til Ubuntu 14.04.3 LTS (GNU / Linux 3.13.0-74-generisk x86_64) * Dokumentasjon: https://help.ubuntu.com/ Systeminformasjon fra tirsdag 9 februar 06:17:28 UTC 2016 Systembelastning: 0.97 Prosesser: 80 Bruk av /: 3.4% av 39.34GB Brukere logget inn: 0 Minneforbruk: 25% IP-adresse for eth0: 10.0.2.15 Byttebruk: 0% Tegn disse dataene og administrer dette systemet på: https: // landskap .canonical.com / Få skythjelp med Ubuntu Advantage Cloud Guest: http://www.ubuntu.com/business/services/cloud 0 pakker kan oppdateres. 0 oppdateringer er sikkerhetsoppdateringer. 

Når du er inne i VM-en, kan du ganske mye gjøre alt du vil: Kjør kommandoer, opprett brukere, opprett filer og kataloger, etc. Du er logget inn som "vagrant" -brukeren, som har sudo-privilegier, så du har full kontroll over VM.

Utveksling av data med VM

Vagrant kartlegger automatisk mappen på vertsmaskinen som inneholder Vagrantfilen til / vagrant-katalogen inne i gjestemaskinen. Dette lar deg redigere filer i favorittredigereren på vertsmaskinen og få den tilgjengelig på gjesten eller alternativt få gjesten til å skrive noen utdatafil til / vagrant-katalogen og bla gjennom den synkroniserte mappen på verten.

Kartlegging av gjesteporter

Ofte vil du kjøre et program som kommuniserer via en port. Den vanligste er en webserver. Vagrant lar deg videresende gjesteporter til vertsmaskinen. 

For eksempel, i konfigurasjonen ovenfor, er gjesteporten 80 kartlagt til verten 8080-porten. Hva det betyr er at uansett hvilken tjeneste som kjører på port 80 i gjesten, kan du få tilgang til lokalehost: 8080 på vertsmaskinen. 

La oss se en demonstrasjon. Først legger jeg en enkel index.html-fil i katalogen ~ / vagrant_intro på verten som synkroniseres med / vagrant_data-katalogen på gjesten.

  

Vagrant er fantastisk!

Da, etter at jeg SSH inn i gjestemaskinen, kjører jeg en liten webserver i / vagrant_data dir:

vagrant @ vagrant-ubuntu-trusty-64: / vagrant $ sudo python3 -m http.server 80 Betjener HTTP på 0.0.0.0 port 80 ... 

Denne en-liner Python HTTP-serveren serverer bare en hvilken som helst statisk fil i arbeidskatalogen. Nå, siden port 80 er kartlagt til verts 8080-port, kan du bla til localhost: 8080 og se resultatet av å kjøre serveren.

Koble til VM gjennom nettverket

Du kan også koble til VM via sin IP-adresse som om det er en virkelig separat server. Jeg legger alltid til et vertsnavn til / etc / hosts, slik at jeg ikke trenger å bruke den nakne IP-adressen, og fordi koden jeg tester vanligvis er konfigurert med vertsnavnet til et produksjonssystem. Dette er hva du må legge til i din / etc / hosts-fil:

# Viktig produksjonssystem 192.168.33.33 production.server.com

Nå vil eventuelle nettverkstilgang til "production.server.com" på maskinen din bli sendt til din VM.

I dette tilfellet er programmene som vanligvis kobles til den eksterne serveren konfigurert med VM IP-adressen eller vertsnavnet. Før Vagrant 1.7, var det en privat nøkkel som kunne brukes til alle maskiner. Dette var et alvorlig sikkerhetsproblem når folk eksponerte sin virtuelle maskin over offentlige nettverk, og alle kunne SSH inn og få tilgang til root. Fra og med versjon 1.7 genererer Vagrant et nytt nøkkelpar for hver maskin. For å finne ut hvor privatnøkkelen for maskinen din er, kjør denne kommandoen: vagrant ssh-config.

Slik kan du SSH direkte til VM:

ssh -o UserKnownHostsFile = / dev / null -o CheckHostIP = no -o StrictHostKeyChecking = no -i ~ / vagrant_intro / .vagrant / machines / default / virtualbox / private_key [email protected]

Administrere dine virtuelle bokser

Vagrant gir mange kommandoer for å håndtere bokser. La oss utforske. For å se en liste over kommandoer, skriv inn: vagrant.

Bruk: vagrant [alternativer]  [] -v, --versjon Skriv ut versjonen og avslutt. -h, --hjelp Skriv ut denne hjelpen. Vanlige kommandoer: boks håndterer bokser: installasjon, fjerning, etc. Koble til til et eksternt delt Vagrant miljø ødelegge stopper og sletter alle spor av vagrantmaskinen global status utgangsstatus Vagrant miljøer for denne brukeren stopper vagrant maskinen hjelp viser hjelpen for en underkommando init initierer et nytt Vagrant-miljø ved å opprette en Vagrantfile-påloggingslogg inn i HashiCorps Atlas-pakkepakker, et løpende vagrantmiljø i en boksplugg administrerer plugins: installere, avinstallere, oppdatere osv. bestemmelsesbestemmelser som vagrant-maskinstasjonen anvender kode i dette miljø til en konfigurert destinasjon rdp kobler til maskinen via RDP reload gjenoppretter vagrant maskin, laster ny Vagrantfile konfigurasjon CV fortsetter en suspendert vagrant maskin scp kopier data i en boks via SCP dele dele Vagrant miljøet med alle i verden ssh kobler til maskinen via SSH ssh-config-utganger OpenSSH gyldig konfigurasjon for å koble til maskinstatusutgangene st Atus av vagrant maskinen suspenderer suspenderer maskinen opp starter og bestemmelser vagrant miljø versjonen skriver ut nåværende og nyeste Vagrant versjon For hjelp på noen enkelt kommando kjører "vagrant COMMAND -h" Ytterligere underkommandoer er tilgjengelige, men er enten mer avanserte eller ikke vanlig . For å se alle underkommandoer, kjør kommandoen "vagrant list-kommandoer". 

Jeg dekket noen av de vanligste kommandoene tidligere. De eske kommandoer lar deg håndtere boksene dine direkte. For eksempel, for å se alle VMene på maskinen din, skriv inn vagrant boks liste. Du kan oppdatere bokser til den nyeste versjonen med Oppdater. De reload kommandoen er veldig nyttig hvis du endrer Vagrantfilen din. Endelig, forsyning lar deg bestemme, konfigurere og installere programvare på VM ved hjelp av ulike provisioners inkludert Chef, marionett, Salt, min favoritt Ansible, og til og med Docker.

Konklusjon

Vagrant gir deg en brukervennlig datamaskin innenfor datamaskinen. Du kan administrere en flåte med VM for ulike formål, og Vagrantfile er grensesnittet ditt for å spesifisere hvordan VM skal oppføre seg. Ha det gøy å utforske Vagrant. Jeg kladde bare overflaten her.