Hajókázás Docker-rel, azaz viszlát Vagrant

Egy korábbi cikkünkben (Lokális fejlesztői környezet percek alatt) bemutattuk a Vagrant-ot, amely egy kiváló eszköz, ha lokális fejlesztői környezetet szeretnénk építeni a gépünkön. A Docker-rel szintén készíthetünk izolált fejlesztői környezeteket, amelyeket szintén szkript-szerűen definiálhatunk. A folyamat végén szintén előáll egy virtuális gép, azonban ez már nagyságrendekkel hatékonyabb, gyorsabb, kevesebb erőforrást emészt fel.

Vagrant
A Vagrant valójában egy virtuális gép kezelő eszköz, amely lehetővé teszi, hogy egyszerű szkriptek segítségével elkészítsük saját konfigurációnkat, valamint az így előállított virtuális gépre feltelepítsük a szükséges komponenseket. Egy fejlesztői környezet ilyen szintű, szkript-szerű leírása már óriási lépés attól, ahogyan korábban dolgoztunk: manuálisan kellett végigkattintgatni a beállításokat és végigmenni a telepítés összes lépésén.

A Vagrant a Virtualbox-ra épül (erről szintén írtunk már korábbi cikkünkben), éppen ezért számos hátránya is van. Egyrészt függ egy harmadik féltől, aki újabb és újabb verziókkal áll elő, így a Vagrant virtuális gépünket is rendszeresen frissítenünk kell (pl. hogy a virtuális “vendég” gép és a hoszt gépünk között működjenek a megosztott mappák; ez a Virtualbox “Guest additions” moduljának frissítésével jár), másrészt az előállított virtuális gép maga is egy merevlemezként viselkedik, tehát igen nagy tárhelyet vesz el a hoszt géptől, éppen ezért nem egyszerű archiválni, mozgatni. Továbbá ne is beszéljünk az egyéb allokált erőforrásokról: külön CPU magokat, memóriát kell egy-egy Vagrant gépnek adnunk.

Mint azt az informatikában már megszokhattuk, mindig van egy új szemlélet, egy új csapat és néhány tízezer sornyi új kód, ami fenekestül felborít mindent – és egyszerűbbé, jobbá teszi munkánkat.

Docker
A Docker egy pehelykönnyű megoldás, amely sok elemében hasonlít a Vagrant-ra. A Docker-rel szintén készíthetünk izolált fejlesztői környezeteket, amelyeket szintén szkript-szerűen definiálhatunk. A folyamat végén szintén előáll egy virtuális gép, azonban ez már nagyságrendekkel hatékonyabb, gyorsabb, kevesebb erőforrást emészt fel.

Nézzük meg, hogyan is működik mindez.

Először is szükségünk van egy Linux kernelre, más szóval a Docker csak Linux kernelre épülő hoszt gépen fut. Ez első hallásra rosszul hangzik, azonban egy virtualizációs lépés közbeiktatásával a Docker szépen futtatható Windows-on, sőt Mac-en is

A legegyszerűbb, ha a Docker Toolbox-ot telepítjük ezeken a hosztokon.

Ha megvan a Linux kernelünk – vagy natívan pl. egy Linux hoszt gépen, vagy virtuálisan Windows-on vagy Mac-en – akkor a Docker komponensek telepítése után bele is vághatunk egy új Docker “gép” elkészítésébe.

Első lépésként indítsuk el a Docker-t a gépünkön:

Ahol a “default” a telepítéskor keletkezett Docker hoszt virtuális gép neve Mac OS alatt.

Hogy parancssorból tovább tudjuk haladni, a következő paranccsal folytassuk:

Ezzel beállítjuk a jelenleg futó shell-ünket, hogy a docker parancsok számunkra elérhetőek legyenek.

Gyorsan ellenőrizzük le, hogy minden rendben működik, a Docker hosztunk rendelkezik IP címmel:

Erre az alábbi választ kaptam:

image08

Minden rendben, haladjunk tovább.

Következő lépésként egy úgynevezett Dockerfile-t kell létrehoznunk. Ez egy egyszerű szöveges file, könnyen előállítható:

Nyissuk meg szerkesztésre kedvenc szerkesztőnkkel

Majd vegyük fel a következő sorokat:

image10

Ha ez megvan, minden további magyarázkodás nélkül szerezzünk gyorsan egy sikerélményt:

image13

…majd:

image06

…és végül:

image12

Mi is történt?

A Dockerfile-unk első sorában annyit mondtunk: légy szíves, készíts nekünk egy új docker image-et az Ubuntu nevű linux disztribúció egyik alap-image-éből. Majd folytattuk: és frissítsd az új rendszerünket, hogy mindenből a legújabb csomag legyen feltelepítve.

Mi történt a háttérben?

A Docker egy központi adattárból letöltött egy minimális Ubuntu-rendszert (csupán 65MB!), ez alapján létrehozta a helyi image-ünket, majd lefuttatta rajta az “apt-get update” parancsot.

Valóban van egy lokális Ubuntu virtuális gépünk? Nézzük meg:

image07

Ott is van a lista első helyén, egy mindössze 200 MB helyet foglaló friss Ubuntu virtuális gép. Elkészült tehát az image, a “mesterpéldány”, hogy használni is tudjuk, el kell indítanunk:

Ezzel a legutóbbi lépéssel bent is vagyunk egy Docker image – pontosabban egy image-ből készült ún. “container” belsejében.

image09

A fenti parancsot (cat /etc/lsb-release) már a virtuális container-ünk “belsejében” adtam ki, ez látszik abból is, hogy ott root felhasználóként kaptam meg a parancssort.

Exit-tel lépjünk vissza a hoszt rendszerünkbe, majd állítsuk le a Docker virtuális gépet:

A következő részben mélyebb vizekre evezünk, addig is hajókázásra fel!