Különböző operációs rendszereken különböző módon telepíthető a Docker és némelyik esetben valójában egy virtuális gép indul el a háttérben, amire a Docker démon kerül, miközben a gazda operációs rendszeren van a kliens. A telepítésről a dokumentációban részletes leírás található, de fejlesztés közben a legegyszerűbb, amikor a saját desktop Linuxodon telepíted és megúszod a virtuális gépek okozta hálózati és a fájlszinkronizációs problémákat. Ha viszont Windowson futtatsz Linux konténert, elkerülhetetlen a virtuális gép. Megfelelő erőforrás esetén egy virtuális desktop Linux telepítése is megoldás lehet, de hogy egy másik hasznos szoftvert is bemutassak, ami ráadásul hasonlít a Dockerhez bizonyos szempontból, a Vagrantot fogom segítségül hívni, hogy leírjam a Docker telepítését. A gépet előre elkészítettem és elérhetővé tettem a Vagrant Cloud‑on. Az elkészítéséhez szükséges forráskódot pedig a GitHub-on. A cikkben ismertetem a Vagrant fontosabb tulajdonságait, hibalehetőségeket és a desktop Ubuntu 16.04-ben, Vagranttal telepített, Dockert tartalmazó gép telepítésének menetét.
Megjegyzés: Ubuntu 16.04 felhasználók a Vagrant telepítését és a virtuális gép használatát akár ki is hagyhatják.
Tartalomjegyzék
- A cikkben szereplő szoftverek és verzióik
- Vagrant
- Összehasonlítás a Dockerrel
- A Vagrant telepítése
- Virtuális gépek indítása
- Provisioner
- Lehetséges problémák
- VAGRANT_HOME és tárhely
- Nem működik a "vagrant up" SSL problémára hivatkozva
- Nem működik a "vagrant up" memóriahibára hivatkozva Windows 10-ben
- Nem működik a "vagrant up" letiltott "VT-x"-re hivatkozva Windows 10-ben
- Megosztott könyvtárak problémája
- Windows és végtelenségig futó "vagrant up"
- SSH kulcs problémája
- A Docker telepítése
- Előre elkészített virtuális gép letöltése és indítása
A cikkben használt szoftverek és verzióik
[Tartalom]
Bár valószínűleg eltérő verziókkal is követhető a cikk, arra az esetre, ha valakinek problémája akadna, alább felsorolom minden használt és tesztelt szoftver verzióját.
- Gazda OS: Windows 7, Windows 10, Ubuntu 16.04
- Vagrant 2.0.1
- VirtualBox 5.2 (Win10, Ubuntu 16.04), 5.0 (Win7)
- Docker 17.09.1
- Docker Compose 1.18.0
Vagrant
Összehasonlítás a Dockerrel
[Tartalom]
A Vagrant egy, a Dockerhez nagyon hasonló eszköz, de inkább virtuális gépek indítására használatos. Hogy mi a hasonlóság?
-
Mindkét program alkalmas arra, hogy egy korábban, előre elkészített rendszerből elindíts egy virtuális környezetet, amiben akár egy vagy több szoftver is lehet.
-
A Vagrant és a Docker is ad lehetőséget lokális sablonok használatára és ingyenesen távoli szerverre feltöltésre is. A Vagranttal készített gépeket a Vagrant Cloud‑ra lehet feltölteni, a Docker image-eket pedig a Docker Hub-ra, de a Docker Cloud-on keresztül is létre lehet hozni a tárolóját.
-
Mindkét rendszerrel van lehetőség a sablonok verziószámmal ellátására és így egy konkrét verzió letöltésére, indítására.
-
A Dockerfile nevű fájl programok telepítését és a konténer egyéb paramétereit tartalmazza, mint például megosztott portok. A Vagrantfile-ba pedig a Vagranttal indított virtuális gép paraméterei kerülnek. Szintén tartalmazhat portátirányítást és telepítést.
-
A Docker és a Vagrant is telepíthető többféle operációs rendszerre.
Persze, azért különbségek is vannak
-
A Dockert Go nyelven írták, a Vagrant-ot pedig Ruby-ban.
-
A Dockerfile speciális formátumú, míg a Vagrantfile valójában egy egyszerű Ruby programkód. Az alapbeállításokhoz nem kell tudni Ruby-ban programozni, de a Vagrantfile-ban komolyabb programot is lehet írni igény szerint, ami még a gazda operációs rendszeren fog futni segítve ezzel a virtuális környezet elindítását.
-
A Docker alkalmazás konténerek kezelésére való, a Vagrant viszont különböző virtualizációs technológiák (provider) egységesített interfésze. Bár leginkább virtuális gépekre használják, Docker konténert is tudna indítani virtuális gép helyett. A különböző providerekhez viszont külön el kell készíteni a sablonokat, tehát nem lehet bármit bármilyen környezetben elindítani, csak ha elérhető hozzá a sablon.
-
A Dockerfile valójában egy sablon elkészítésének leírása, amiből elindítható a konténer. A Vagrantfile alapján viszont nem sablon készül, hanem a virtuális környezet, ami exportálható, majd az elkészült image feltölthető egy szerverre. (A sablon készítéséhez a Packer is használható.)
-
A Docker image-ek letöltésénél egy fix címkét kell megadni verzióként. Ez lehet verziószám, de tetszőleges elnevezés is, ami elérhető. Mivel egy image több címkét kaphat, többféleképpen lehet hivatkozni rá. A Vagrant image-eket valójában Vagrant Box-nak hívják és a szemantikus verziózásnak a Ruby nyelvnél használt változatát javasolják. Ettől el lehet térni, viszont a Vagrant Box verzióját ekkor nem lehet olyan szabályokkal megadni, hogy elkerülhető legyen a nem kívánt frissítés letöltése, de a hibajavítások például lejöjjenek. Egy boxhoz pedig csak egy verziószám rendelhető.
A Vagrant telepítése
[Tartalom]
A Vagrant telepíthető különböző operációs rendszerekre. Ez jelenleg Debian, Windows, Centos és Mac OS X. A vagrantup.com oldalon a Download linkre kattintva elérhető az aktuális lista és telepíthető a megfelelő verzió. Akár 32 bites, akár 64 bites rendszerekre. A Debian verzió természetesen nem kizárólag Debianra, hanem más Debian alapú OS-ekre is működik, mint például Ubuntu.
Windowson telepítés után szükséges lehet egy újraindítás. Ha valamiért nem kerülne be a Windows Path környezeti változóba a Vagrant útvonala, akkor arról gondoskodni kell. Alapértelmezett telepítési könyvtárral ez a "C:\HashiCorp\Vagrant\bin" mappát jelenti.
Virtuális gépek indítása
[Tartalom]
A Dockerrel ellentétben a Vagrant-nak már a gép indításához is szüksége van egy konfigurációs fájlra, a Vagrantfile-ra. Ezt viszont le tudja magának generálni a "vagrant init" utasítással.
vagrant init boxneve --box-version 1.0.0
A "--box-version" elhagyható. Akkor a legfrissebb verzió fog indulni elindításkor.
A "vagrant up" abban a mappában futtatandó, ahol a Vagrantfile van. Az utasítással egy, a már lokális tárolóban levő sablonból elindítható egy virtuális gép. Ha viszont nincs még letöltve és elérhető a Vagrant Cloud-on, akkor először letölti és hozzáadja a helyi tárolóhoz. Célszerű, bár nem kötelező megadni a választott providert, viszont egyes, később tárgyalt esetekben előfordulhat, hogy nem indul el enélkül a gép.
vagrant up --provider virtualbox
A "vagrant box add" utasítással lehet egy boxot a helyi tárolóhoz adni a gép elindítása nélkül. Ez akár a saját gépen levő box fájlt is hozzá tudja adni, de a Vagrant Cloud-ra feltöltöttet is. Ehhez persze le is kell töltenie onnan.
Ha megunod a gépet és törölnéd, akkor a "vagrant destroy" segít. De le is állítható a "vagrant halt"-tal.
Provisioner
[Tartalom]
A "Provider" fogalmat már említettem, ami például a Virtualbox lehet, vagy Hyper-V, de akár már Docker is. Vagyis, hogy milyen technológiával fog indulni a virtuális környezet. A Vagrantfile-ban viszont akár programokat is lehet telepíteni vagy tetszőleges utasításokat lefuttatni a vendég operációs rendszerben. Ezt a folyamatot hívjuk "Provisioning"-nek. Azokat, amik ilyen utasítások futtatását lehetővé teszik, "provisioner"-eknek nevezzük. A legegyszerűbb a "Shell" provisioner, ami vagy egy shell script felmásolásával vagy sorainak egy változóba töltésével, majd futtatásával teszi lehetővé akár programok telepítését a virtuális gépen vagy konfiguráció módosítását. De létezik Docker provisioner is, ami Ruby változókon keresztül segít a Docker utasítások kiadásában, illetve automatikusan telepíti is a legfrissebb Dockert a gépre. A legfrissebb persze nem mindig a legjobb.
Lehetséges problémák
VAGRANT_HOME és tárhely
[Tartalom]
Tudni kell, hogy lokális tárolóhoz hozzáadott vagrant boxok alapértelmezés szerint a felhasználó saját könyvtárában levő ".vagrant.d" mappába kerülnek, így arra is figyelni kell, hogy legyen elég hely a partíción. Ha nincs, akkor a VAGRANT_HOME környezeti változó megváltoztatásával átállítható tetszőleges partíció tetszőleges könyvtárára a boxok helye. Érdemes még a létrehozott virtuális gépek mappáját is ellenőrizni, hogy az induló gépek se telítsék be a partíciót. Virtualboxban ez egészen biztosan átállítható.
Megjegyzés: Pár éve még valamelyik verziónál problémát okozott, ha a VAGRANT_HOME könyvtár útvonala tartalmazott ékezetes karaktereket. Mivel a Windows a telepítéskor begépelt valódi névből generált mappanevet, a változó módosítása nélkül nem is működött a Vagrant sem.
Nem működik a "vagrant up" SSL problémára hivatkozva
[Tartalom]
Nálam ez még nem fordult elő, ezért nem fejtettem meg a konkrét problémát, de van, hogy a Vagrant Cloud HTTPS-sel kezdődő URL-je miatt nem sikerül a még le nem töltött box megadásával a virtuális gép indítása egyes rendszereken. A megoldás lehet, ha előre letöltöd a vagrant boxot az "insecure" opcióval, majd akkor már a helyi tárolóból elindul a virtuális gép, ugyanis a "vagrant up" a "docker run"-hoz hasonlóan nem csak elindítja a gépet, hanem le is próbálja tölteni a sablont.
vagrant box add boxneve -c --insecure
Nem működik a "vagrant up" memóriahibára hivatkozva Windows 10-ben
[Tartalom]
Sajnos gyakran nem ad értelmes hibaüzenetet a Vagrant és erre ez a hiba is bizonyíték, amikor a vagrant up parancs kiadására megpróbál elindulni a virtuális gép, de felugró ablakban egy memóriacímre hivatkozás hibaüzenete jelenik meg, közben viszont a Hyper-V virtualizáció engedélyezése okozza a gondot. Ha Virtualbox-ban szeretnél virtuális gépet indítani, a Hyper-V szolgáltatást ki kell kapcsolni a Windowsban.
Nem működik a "vagrant up" letiltott "VT-x"-re hivatkozva Windows 10-ben
[Tartalom]
Miután az előző pontban írt hiba megjelent, kipróbáltam egy másik vagrant box indítását és ekkor már kiírta, hogy valójában a "VT-x" -et hiányolja, amit engedélyezni kell a BIOS-ban. Ám az engedélyezve volt, de mint kiderült, a Hyper-V szépen kisajátította magának. Mint ebből is látható, ugyanaz a hiba más hibaüzenetet is eredményezhet más sablonnál. A lényeg, hogy a Hyper-V legyen kikapcsolva, hacsak nem éppen Hyper-V alapú sablont szeretnél felhasználni.
Megosztott könyvtárak problémája
[Tartalom]
Meg lehet osztani az indított virtuális géppel a gazda operációs rendszer mappáit, de alapértelmezetten a projekt könyvtárát automatikusan megpróbálja szinkronizálni a vendég rendszerrel. A szinkronizáció módja többféle lehet, amit az operációs rendszeren elérhető programokból próbál eldönteni, ám előfordult, hogy ez tévesen sikerült neki, így Windowson próbált meg rsync-kel szinkronizálni, ami viszont nem volt elérhető. Ilyen esetben manuálisan meg kell adni a Vagrantfile-ban a projekt könyvtár megosztásának módját is, vagy le kell tiltani, ha nincs rá szükség.
Windows és végtelenségig futó "vagrant up"
[Tartalom]
A "vagrant up --debug" parancs futtatásával látható, hogy a Vagrant a Powershellt is próbálja használni. Ez viszont lehet elavult. Míg például Windows 10-ben nincs probléma, addig egy régi Windows 7-ben régi Powershellel nem fut le a "vagrant up". Persze, miért is szólna, mi a problémája. A Powershell frissítésén kívül van azért még egy mód a parancs sikeres futtatására. Ha megadod manuálisan a provider-t, azaz, hogy Virtualbox-ban fog futni a gép, akkor sikeresen lefut az utasítás.
vagrant up --provider virtualbox boxneve
SSH kulcs problémája
[Tartalom]
A gép létrehozásakor a Vagrant megpróbál csatlakozni a vendég OS-hez SSH-val. Előfordulhat, hogy ez nem sikerül, mert hibás a gépben levő publikus kulcs. Van egy alapértelmezett kulcs, ami viszont megváltozhat, amikor elindítod a gépet. Nincs ezzel gond, amíg nem exportálod a gépet és próbálod feltölteni valahova és újra felhasználni. Ekkor ugyanis a már megváltozott kulcs miatt nem fog tudni a Vagrant bejelentkezni a gépre, hogy lefuttassa a szükséges utasításokat. Az új kulcs beillesztése letiltható a Vagrantfile config blokkjában az alábbi beállítással:
config.ssh.insert_key = false
A Docker telepítése
[Tartalom]
A Docker megfelelő konfigurációjában el lehet veszni és operációs rendszertől függően kicsit másképp is működik. Gondolok itt arra, hogy indul-e a háttérben virtuális gép vagy valóban natívan fut a gazda OS-en. Régóta vannak megoldások például Windows rendszeren is a Linux konténerek indítására (Boot2Docker, Docker For Windows), de ilyen esetben, ahogy korábbi fejezetekben említettem, van virtuális gép. A kérdés csak az, hogy Virtualbox-ban vagy mondjuk "Hyper-V"-ben indul-e el. Windows 10-ben Windows konténerek indításánál nem lenne szükség virtuális gépre. Én viszont Linux konténerekről fogok írni, viszont a Windowsosokról sem feledkeznék meg, ezért egy desktop Ubuntu 16.04 telepítését mutatom meg Vagrant segítségével, amibe a Dockert és a Docker Compose-t is telepítem. A Desktopra azért van szükség, hogy a virtuális gép saját böngészőjét használva ne legyen szükség portátirányításra vagy bármilyen hálózati konfigurációra a Vagrant-ban, ami ennek a fejezetnek nem témája.
Az egyszerűség kedvéért nem teljesen nulláról telepítem a desktop Ubuntut, hanem felhasználok egyet a Vagrant Cloud-ról. Az "fso/xenial64-desktop" box "2017-11-01"-es verzióját (látható, hogy itt nincs szemantikus verziószám). Ehhez szükségem lesz két Vagrantfile-ra. Igen, kettőre. Az egyikre azért, hogy abból elinduljon egy virtuális gép, amibe a szükséges szoftvereket már telepítettem, a másikra azért, hogy mellékeljem a letölthető sablonhoz. Így annak tartalma is lefut majd a "vagrant up" hatására. Ez azért szükséges, mert így a gazda operációs rendszertől függő utasítások futhatnak le.
Az első Vagrantfile a gép sablonjának létrehozásához való lesz. Itt minden a "config"
blokkban lesz:
# Ide jön minden
end
A két függőleges vonal közötti "config" egy objektum lesz, aminek különböző tulajdonságain keresztül lehet konfigurálni a virtuális gépet. A legfontosabb, hogy milyen sablonból akarok dolgozni. Ezen kívül én azt is megadtam, hogy ne keressen frissítéseket a géphez.
config.vm.box = "fso/xenial64-desktop"
config.vm.box_version = "2017-11-01"
config.vm.box_check_update = false
# és a többi
end
Szeretném elkerülni, hogy gondom legyen az SSH kulccsal és a felcsatolható mappákkal. Ennél a lépésnél amúgy sem lenne értelme mappát megosztani, mivel most csak a sablon készül, de ezalatt azért el fog indulni a gép. A továbbiakban nem mutatom a teljes config blokkot, csak az új sorokat:
config.ssh.insert_key = false
Majd pedig beállítom, hogy nem kérem a Virtualbox ablakának megjelenítését és 1GB memóriát adok a gépnek, ami egyébként is az alapértelmezés. Ez már a "config" blokkhoz hasonló néhány sor lesz,
de még mindig azon belül kell írni és kizárólag virtualbox esetén működik:
vb.gui = false
vb.memory = "1024"
end
Említettem a "Shell" provisionert. Most az következik, mégpedig annak is az inline változata. Vagyis egy változóba másolom mindazt, amit szeretnék lefuttatni a vendég OS-ben shell-ben.
# Ide jönnek a parancsok
SHELL
Itt a <<-SHELL
a kezdő idézőjelet helyettesíti. A SHELL utána pedig annak lezárását. Így közte nyugodtan használhatok idézőjeleket is. A fenti kód természetesen továbbra is a "config"
blokk része. Az alábbiak viszont már a SHELL provisionerben lesznek megadva. A következő sorok gyakorlatilag a Docker Ubuntura vonatkozó telepítési útmutatójából van és a legfrissebb Docker verzió helyett pontosan azt telepíti, amit kiválasztok. Ez most a 17.09.1-es Community Edition verzió lesz. A telepítés előtt frissíti az operációs rendszert, utána pedig hozzáadja a "docker" csoporthoz a "vagrant" felhasználót, hogy "sudo" nélkül tudjon konténereket indítani.
apt-get upgrade -y
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
apt-get update
apt-get install -y docker-ce=17.09.1~ce-0~ubuntu
usermod -aG docker vagrant
Ezután még a Docker Compose-t is telepítem, aminek módját a Docker Compose 1.18.0 Release leírásából másoltam ki.
chmod +x /usr/local/bin/docker-compose
Ezután a teljes Vagrantfile tartalma a következő:
config.vm.box = "fso/xenial64-desktop"
config.vm.box_version = "2017-11-01"
config.vm.box_check_update = false
config.vm.synced_folder ".", "/data/", disabled: true
config.ssh.insert_key = false
config.vm.provider "virtualbox" do |vb|
vb.gui = false
vb.memory = "1024"
end
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get upgrade -y
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
apt-get update
apt-get install -y docker-ce=17.09.1~ce-0~ubuntu
usermod -aG docker vagrant
curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
SHELL
end
Így most már a Dockerrel nem lesz gond, viszont szeretném, ha mindenkinek a megfelelő Virtualbox Guest Additions települne a virtuális gépben, valamint a magyar billentyűzetkiosztást is szeretném automatikusan beállítani úgy, hogy bármikor helyrehozhassam, ha esetleg elállítanám. Mivel egy desktop Linux készül, jó, ha magyar a billentyűzet. Tehát Ruby nyelven a Vagrantfile-ban lekérdezem a Virtualbox verzióját és letöltöm a megfelelő Gust Additionst. De honnan tudom, melyiket kell telepíteni? Ehhez kell egy Ruby függvényt írni, amit felhasználva rögtön a VBOX_VERSION változóba mentem a verziót. A következőképpen néz ki és még a "config" blokk elé fog kerülni:
vboxmanage = Vagrant::Util::Which.which("VBoxManage") || Vagrant::Util::Which.which("VBoxManage.exe")
if vboxmanage == nil && Vagrant::Util::Platform.windows?
vboxmanage = ENV["VBOX_MSI_INSTALL_PATH"] || ENV["VBOX_INSTALL_PATH"]
vboxmanage = vboxmanage + "\\VBoxManage.exe"
end
if vboxmanage != nil
s = Vagrant::Util::Subprocess.execute(vboxmanage, '--version')
longVersion = s.stdout.strip!
shortVersion = longVersion.split("r")[0]
return shortVersion
else
return nil
end
end
VBOX_VERSION = virtualbox_version()
A VBOX_VERSION válozó egy újabb "shell" provisionernek lesz átadva, de adok neki nevet is, mert így utólag is le tudom futtatni, ha szükséges. Ha frissítem a Virtualbox-ot, akkor újra lefuttatva frissül a Guest Additions is.
echo 'if [ -n "${DISPLAY}" ]; then setxkbmap hu; fi;' >>/home/vagrant/.bashrc
wget http://download.virtualbox.org/virtualbox/${VBOX_VERSION}/VBoxGuestAdditions_${VBOX_VERSION}.iso
mkdir -p /media/iso
mount -o loop VBoxGuestAdditions_${VBOX_VERSION}.iso /media/iso
CURRPWD=`pwd`
cd /media/iso
./VBoxLinuxAdditions.run
cd ${CURRPWD}
umount /media/iso
unlink VBoxGuestAdditions_${VBOX_VERSION}.iso
SHELL
Mindezek után szeretném, ha újraindulna a gép. Ez lesz a legrövidebb "shell" provisioner, már idézőjelekkel a SHELL kulcsszó helyett.
config.vm.provision "reboot", type: "shell", inline: "reboot"
Ami még kimaradt, hogy ismét szeretném letiltani a projekt mappa megosztását, illetve most már bekapcsolnám a Virtualis gép ablakát, hogy teljes képernyőre téve dolgozhassak benne. Továbbra is 1GB memóriát határozok meg, de ezt felül lehet írni saját Vagrantfile-ban.
config.vm.provider "virtualbox" do |vb|
vb.gui = true
vb.memory = "1024"
end
A teljes "Vagrantfile.provision" fájl tehát így néz ki:
vboxmanage = Vagrant::Util::Which.which("VBoxManage") || Vagrant::Util::Which.which("VBoxManage.exe")
if vboxmanage == nil && Vagrant::Util::Platform.windows?
vboxmanage = ENV["VBOX_MSI_INSTALL_PATH"] || ENV["VBOX_INSTALL_PATH"]
vboxmanage = vboxmanage + "\\VBoxManage.exe"
end
if vboxmanage != nil
s = Vagrant::Util::Subprocess.execute(vboxmanage, '--version')
longVersion = s.stdout.strip!
shortVersion = longVersion.split("r")[0]
return shortVersion
else
return nil
end
end
VBOX_VERSION = virtualbox_version()
Vagrant.configure("2") do |config|
config.vm.synced_folder ".", "/data/", disabled: true
config.vm.provider "virtualbox" do |vb|
vb.gui = true
vb.memory = "1024"
end
config.vm.provision "vbguestupdate", type: "shell", env: {"VBOX_VERSION" => VBOX_VERSION}, inline: <<-SHELL
echo 'if [ -n "${DISPLAY}" ]; then setxkbmap hu; fi;' >>/home/vagrant/.bashrc
wget http://download.virtualbox.org/virtualbox/${VBOX_VERSION}/VBoxGuestAdditions_${VBOX_VERSION}.iso
mkdir -p /media/iso
mount -o loop VBoxGuestAdditions_${VBOX_VERSION}.iso /media/iso
CURRPWD=`pwd`
cd /media/iso
./VBoxLinuxAdditions.run
cd ${CURRPWD}
umount /media/iso
unlink VBoxGuestAdditions_${VBOX_VERSION}.iso
SHELL
config.vm.provision "reboot", type: "shell", inline: "reboot"
end
Ehhez még egy Batch szkriptet készítettem, hogy létrehozza a gépet, exportálja és mellékelje a Vagrantfile.provision nevű fájlt is a csomaghoz, amit feltölthetek a Vagrant Cloud-ra. Hogy miért Batch? Mert Linuxon Bash-ben túl egyszerű lett volna... Illetve ott nem használok plusz virtuális gépet. A lényeg valójában a következő néhány sor, ami az localhost/docker-webdev névre hallgató boxot telepíti a lokális tárolóba:
vagrant up --provider vitualbox
vagrant halt
vagrant package --base VIRTUALIS_GEP_NEVE_VAGY_ID --output docker-webdev.box --vagrantfile Vagrant.provision
A VIRTUALiS_GEP_NEVE_VAGY_ID helyére az elindult virtuális gép nevét kellene írni, vagy az egyedi azonosítóját, amiből egyiket sem tudom előre. A szkript ennek meghatározásában is segít, mert a gép létrehozásakor bekerül a projektben a ".vagrant/machines/default/virtualbox/id" fájlba a gép azonosítója, amiből a szkript kiolvassa.
Előre elkészített virtuális gép letöltése és indítása
[Tartalom]
A fent leírtak akkor érdekesek, ha saját megoldást is szeretnél készíteni. Én viszont a cikkhez elkészítettem a gépet és feltöltöttem a Vagrant Cloud-ra, amit az alábbi utasítással el is indíthatsz:
vagrant up --provider virtualbox
Induláskor a rendszer nem fog jelszót kérni, de ha sokáig inaktív vagy, zárolva lesz a képernyő. A név és a jelszó is "vagrant", ha vissza kellene jelentkezni.
Fontos, hogy várd meg, amíg rendben letöltődik a sablon és települ a Virtualbox Guest Additions is. Amint a parancssorban már nem látszik üzenet és visszakaptad a promptot, valamint újraindult a virtuális gép, használatba veheted a rendszert. Az újraindulás előtt megjelenik a grafikus felületen is egy üzenet, hogy telepítheted az új Guest Additionst. Erre ne kattints rá! Mindent el fog intézni a Vagrant magától.