fbpx
Hajókázás Docker-rel, azaz viszlát Vagrant ShiwaForce Admin 2015. szeptember 21

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

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:

$ docker-machine start default

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:

$ eval "$(docker-machine env default)"

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:

$ docker-machine env default

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ó:

$ touch Dockerfile

Nyissuk meg szerkesztésre kedvenc szerkesztőnkkel

$ vim Dockerfile

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:

$ docker build -t my-first-docker-image

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:

$ docker images

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:

$ docker run -i -t my-first-docker-image /bin/bash

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:

$ docker-machine stop default

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