Docker - 1. rész: Alapok, telepítés, első használatba vétel

Attila | 2022. 12. 21. 13:17 | Olvasási idő: 5 perc

Címkék: #Container #Docker #Image #Telepítés (Installation) #Virtualizáció (Virtualization)

Fejlesztőként mindig újabb és újabb kihívásokkal kell szembenéznünk és meg kell birkóznunk velük. Ez a "minisorozat" most abban fog segíteni bennünket, hogy az alkalmazásainkat hatékonyabban, az erőforrásokat optimálisan felhasználva tudjuk működtetni őket, akár majd a saját gépünkön, akár egy szerver gépen, vagy éppen majd a felhőben.
docker-install

Bevezetés

Manapság már egyetlen fejlesztő sem "úszhatja" meg, hogy ne foglalkozzon az alkalmazásai fejlesztésénél a deployment (publikálás és működtetés elindítása) fázissal. Mi is megnéztünk már számos ilyen lehetőséget:

  • én foglalkoztam az Azure-ral több bejegyzésemben,
  • Zsoltival a Heroku használatát mutattuk meg szintén több bejegyzésben (emiatt is érdemes használni a blog mellett jobbra látható tag-eket!), de Zsolti volt az, aki a Vercel működtetését is bemutatta egy React alkalmazás publikálásán keresztül,
  • Donát pedig a Nethely szolgáltatót ismertette, és közösen telepítettük oda a Laravel-es alkalmazásunkat.

Ezekben az esetekben viszont a kiszolgáló környezetet az adott szolgáltatók biztosították: például a webszervert vagy az adatbázis szervert, amelyekre mindenképpen szükségünk volt egy-egy nagyobb alkalmazás futtatásához.

Most egy kicsit újabb vizekre evezünk, ugyanis a Docker virtualizációs platformmal, környezettel és az eszközeivel fogunk megismerkedni (és nem hiába használom már másodszor a vizes példát, ugyanis a Docker-nek az ikonja a bálna, amely mint egy óriási szállító hajó, konténereket cipel a hátán, innen is asszociáltam a vízre).

Az ismerkedést lépésről-lépésre fogjuk megtenni, kezdetben a Docker fogalmait igyekszem tisztába tenni, aztán telepítjük, használatba vesszük, jónéhány dolgot megoldunk vele, és később a Laravel alkalmazásainkat is ilyen környezetbe fogjuk már futtatni lokálisan és még talán valamelyik felhőszolgáltatásban is... jelenleg ennyire látok el a terveimben, de ki tudja még, hogy mit hozhat a jövő. Nem is húzom tovább az időt... vágjunk bele!


Alapok

Mi az a Docker?

A Wikipedia leírása szerint ez egy nyílt forráskódú projekt, ami automatizálja a szoftveres alkalmazások futtatását úgynevezett konténereken belül úgy, hogy egy absztrakciós réteggel feljebb helyezi a virtualizációt, mint ha egy virtuális gépet futtatnánk egy operációs rendszerrel / rendszeren.

A Docker egy platform és eszközkészlete, amellyel a fejlesztők, rendszer adminisztrátorok könnyedén tudják telepíteni, kihelyezni (deploy) az alkalmazásaikat egy homokozóba (sandbox, mint konténer), hogy ott futtassák őket a gazda gép operációs rendszerén, például egy Linux-on. A kulcsfontosságú nyereség a Docker használatával az az, hogy ez engedi a felhasználóknak, hogy becsomagoljanak egy alkalmazást annak minden egyes függőségével együtt egy szabványosított egységbe. Nem úgy, mint a virtuális gépek, a konténerek nem igényelnek túlzottan sok erőforrást, így még hatékonyabban tudja felhasználni az „alatta lévő” rendszer erőforrásait.

Mik azok a konténerek?

Összehasonlítva őket a virtuális gépekkel, amelyeknél a gazda gép operációs rendszere és a gazda gép erőforrásait használja a „vendég” virtualizált operációs rendszer, amely nagyon sok erőforrást igényel az ő saját működéséhez. Ezzel szemben a konténerek más megközelítést alkalmaznak: a konténerek a gazda operációs rendszer alacsony szintű mechanikáját kihasználva a virtuális gépek elszigeteltségének nagy részét biztosítják, a számítási igény és teljesítmény töredéke mellett.

Miért használunk konténereket?

A konténerek olyan logikai csomagolási mechanizmust kínálnak, amelyben az alkalmazások elvonatkoztathatók attól a környezettől, amelyben ténylegesen futnak. Ez a szétválasztás lehetővé teszi, hogy a konténeralapú alkalmazások könnyen és következetesen telepíthetők legyenek, függetlenül attól, hogy a célkörnyezet egy privát adatközpont, a nyilvános felhő vagy akár egy fejlesztő személyes laptopja. A fejlesztők így kiszámítható (értsd: mindig mindenhol nagyjából ugyanannyi erőforrást használó) környezeteket hozhatnak létre, amelyek elszigeteltek a többi alkalmazástól, és bárhol futtathatók.

Üzemeltetési szempontból a hordozhatóság mellett a konténerek az erőforrások pontosabb ellenőrzését is lehetővé teszik, így az infrastruktúra hatékonyabbá válik, ami a számítási erőforrások jobb kihasználását eredményezheti.

Ezen előnyök miatt a konténerek (és a Docker) széles körben elterjedtek. Az olyan vállalatok, mint a Google, a Facebook, a Netflix és a Salesforce a konténereket a nagy mérnöki csapatok produktívabbá tételére és a számítási erőforrások jobb kihasználására használják. Sőt, a Google a konténereknek tulajdonította, hogy megszüntették a teljes adatközpont szükségességét.


Docker Desktop alkalmazás telepítése (Windows)

A Docker platform futtatására és kezelésére van most már egy Windows-os alkalmazás is, ami többé-kevésbé jól használható. Linux-alapú rendszerekre már régebb óta létezik ilyen megoldás, úgy tudom. Aki azonban azt gondolná, hogy mivel van már Windows-os verzió is, emiatt elkerülhetjük a Linux használatát, azt sajnos el kell keserítenem, mert mindenképpen szükség lesz a Linux-ra, sőt Linux-os parancsokat is fogunk használni, a docker-specifikus parancsokon túl, de igyekszem majd mindig mindent elmagyarázni.

Letöltés

Innen tudjuk beszerezni: https://www.docker.com/products/docker-desktop


Nagyjából 500 MB-os a telepítő mérete és azért van helyigénye akkor, amikor majd ténylegesen használatba vesszük, úgyhogy érdemes erre figyelni, hogy legyen neki helye nőni, illetve nem is feltétlenül az alkalmazásnak magának, hanem majd a konténereinek, képfájljainak stb.

A legfrissebb verziója 2022. december 21-én: v4.15.0 (néhány napja még a 4.14.1. volt a legfrissebb, ezért láthatók ezek az alábbi képek között). Az alkalmazás amúgy mindig felhívja a figyelmet induláskor arra, hogy ha van belőle újabb verzió, és akkor lehet is frissíteni magában, nem kell külön letöltenünk valami frissítőcsomagot hozzá manuálisan.

Telepítés

Előfeltételek:

  • Windows 10 vagy 11 operációs rendszer, lehetőleg a legfrissebb verzióra való felfrissítéssel.
  • 64 bites processzor
  • Legalább 4 GB RAM, de azért ez nagyon minimális előfeltétel, ha csak ennyi van, akkor nagyon fog döcögni...
  • A számítógép BIOS-ában engedélyezni kell a virtualizációt. Ez alapból talán engedélyezve van, ha viszont a telepítés során hibát kapunk, akkor ez is egy olyan pont lehet, amit érdemes ellenőrizni.

A telepítő elindítása után rögtön feljön ez a beállításokat tartalmazó ablak

Az első checkbox-ra hadd hívjam fel a figyelmet, mert a WSL-t (Windows Subsystem for Linux) fogjuk telepíteni a háttérben, vagyis azt, hogy Linux-ot tudjunk futtatni Windows operációs rendszeren, így egyidőben tudunk majd Windows-t és Linux-ot is használni. Mindezt a Hyper-V virtualizációs támogatás helyett fogjuk tudni használni. A telepítés végén pedig megkapjuk ezt az ablakot:

Egy újraindítás következik, ami után megkapjuk ezt a nagyon barátságos beköszönő ablakot, amit el is fogadhatunk (Accept), jobb esetben még bele is olvasgatsz:

Majd indulunk:

De rögtön megkapunk egy figyelmeztető ablakot is, ami a WSL 2 telepítésének "befejezetlenségére" figyelmeztet, úgyhogy ezt be kell fejeznünk, úgyhogy kattintsunk rá a linkre, amit ott ír az ablak (https://aka.ms/wsl2kernel).

Ez a link rögtön egy olyan folyamatra vezet, aminek a 4. pontját látjuk. Én - a biztonság kedvéért - az első 3 pontot is megnéztem és végre is hajtottam az ott leírtakat. Ehhez egy Powershell-t indíthatunk a Windows-unk Start menüjéből, de rendszergazdaként indítsuk (a Start menü jobb oldalán lehet kiválasztani, amikor rákerestünk a Powershell-re), majd jöhet a következő három lépés:

  1. lépés: adjuk ki ezt a parancsot: dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
  2. lépés egy rendszer ellenőrzéssel kapcsolatos információ, hogy képes-e az operációs rendszerünk futtatni a legfrissebb WSL 2-t.
  3. lépés: adjuk ki ezt a parancsot: dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

... és el is érkeztünk arra a 4. pontra, amire amúgy is vezetett a figyelmeztető ablak linkje, vagyis a 4. lépésre. A „Step 4”-ben lévő első pontban lévő telepítő fájlt (https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi) le is tölthetjük és indíthatjuk a telepítését:

Ez nagyon gyorsan települ. Visszatérhetünk a weboldalra és jöhet a „Step 5”, azaz az 5. lépés, adjuk ki a Powershell-ünkben a következő utasítást:

wsl --set-default-version 2

Amely után ezeket a parancsokat tartalmazza a Powershell-ünk (csak ellenőrzésként mutatom itt meg, hogy látszódjanak a lépések egymás után):

6. lépésben következhet a Linux rendszer telepítése, ízlés szerint lehet választani közülük. Én a legfrissebb Ubuntu-t fogom telepíteni, amely amúgy a Microsoft Store-ban is elérhető egy keresés után, de itt van rá közvetlen link is. Ubuntu 22.04.1 LTS: https://apps.microsoft.com/store/detail/ubuntu-22041-lts/9PN20MSR04DW?hl=de-at&gl=at

Telepítsük. Majd utána meg is nyithatjuk… Adjunk meg egy csupa kisbetűs felhasználónevet, majd a jelszavunkat kétszer egymás után (a kurzor biztonsági okokból nem fogja jelezni, hogy éppen írjuk a jelszavunkat, de ez ne zavarjon meg minket) és utána már benn is vagyunk az Ubuntu Linux-unkban:

Utána, ha visszatérünk a weboldalra a lépésekhez, akkor láthatjuk, hogy gyakorlatilag egy opcionális lépés maradt hátra, ami a Windows Terminal program telepítéséről szól. Én ezt eddig nem használtam, csak a VSCode-ban lévő Terminal-t, vagy ahogy itt is láttuk a Powershell-t, esetleg a parancssort (cmd.exe-t) használtam, de most teszek vele egy próbát: https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701?hl=de-at&gl=at

Itt a képen már a program futtatása látható. A tab-okra (lapfülekre) hívnám fel a figyelmet, mert itt most éppen egy Windows Powershell-t, egy Git Bash terminált és az új Ubuntu Linux-omat tudom kezelni, mindössze egyetlen alkalmazás használatával, úgyhogy mindenképpen hasznos lehet a jövő szempontjából.

Ezután visszatérhetünk a korábbi Docker Desktop-os figyelmeztető ablakunkra (amelyen még a WSL2 befejezetlenségét jelezte nekünk), ahol kattinthatunk a „Restart” gombra, hiszen végrehajtottuk a telepítés(eke)t.


Docker Desktop első használata

Csináljuk végig ezt a tutorial-t, ebből baj nem lehet!

A bal oldali menüt megnézve 4 nagyobb ponton fog végigvezetni minket:

  1. Clone
  2. Build
  3. Run
  4. Share

Ezek így nem tűnnek olyan bonyolultnak. A klónozással kezdünk. Az ablak közepében egy kicsit részletesebb magyarázatot is találunk, a jobb oldalon pedig egy Windows PowerShell-t. A klónozás során egy "Getting Started" nevű GitHub repót fogunk példányosítani, ami minden olyan dolgot tartalmaz, amire nekünk szükségünk van: egy image (kép) alapján felépítünk egy konténert és már futtatjuk is. Most még ne foglalkozzunk azzal, hogy esetleg nem tudjuk, hogy mi az az image vagy container. Egyszerűen csak adjuk ki ezt a parancsot, amit beírhatnánk manuálisan a jobb oldali PowerShell-be, de sokkal egyszerűbb, ha csak rákattintunk a középső részen lévő kék gombszerű parancsra: a gombnyomás hatására automatikusan beíródik a PowerShell-be és elindul a parancs futása, ami a GitHub repót fogja klónozni. Itt látható az eredménye:

Mehetünk a következő lépésre ("Next Step" gomb megnyomása következhet középen). Most felépítjük a képfájlt (build the image), a recept ugyanaz, mint az előbb, csak a kék gombra kell kattintanunk, majd figyeljük a parancs lefutását a PowerShell-ben.

Felépítés után ezt kell kapnunk:

A következő lépésben ("Next Step") futtassuk az első konténerünket:

A konténer a képfájlon alapul, amit az előző lépésben építettünk fel. A konténer elindítja az alkalmazásunkat a saját erőforrásaival, elszigetelten fog működni a számítógép többi részétől. Lehet viszont, hogy a Windows Defender vagy valamilyen egyéb vírusirtó meg akarná fogni, ezt ne hagyjuk, engedélyezzük a Docker Desktop Backend tűzfal igényeit.

Ezután már fut is a konténerünk. A következő lépésben következhet a mentés és megosztás.

Futtathatnánk a parancsot ugyanúgy, mint az előzőekben, de inaktív a gomb. Be kell jelentkezni ("Sign in here") előtte a Docker Hub-ba.

Ha még friss felhasználók vagyunk, akkor előtte még regisztráljunk is az itt látható alsó linken. Bejelentkezés után már aktívvá válik az előbb még inaktív "docker tag"-es parancs és "push-olhatjuk" is az image-ünket a saját Docker Hub-os tárunkba.

A feltöltés sikeres volt, úgyhogy végeztünk a tutorial-lal. Utána megnézhetjük, hogy mi is került fel a Hub-ra: https://hub.docker.com/repositories Nekem már van több itteni image-em, de docker101tutorial nevűt mindenkinek látnia kell így már.

A Docker Desktop tutorial oldalán pedig már látjuk is az eredményt:

Itt már láthat, hogy fut is a konténerünk a 80-as port-on, amit mi a böngészőben ellenőrizhetünk, hiszen ez egy webes alkalmazás.

Egy újabb tutorial-t kapunk itt, amivel majd sokkal részletesebben meg fogjuk tudni ismerni a Docker elemeit, parancsait. Ezzel fogjuk folytatni a munkát.


Összefoglalás

Ebben a bejegyzésben először ismertettem a céljainkat. Megismertük a Docker alapjait és telepítettük (a függőségeivel együtt: WSL 2, Ubuntu Linux) a Docker Desktop alkalmazást. Utána egy rövid tutorial-on keresztül létrehoztuk az első képfájlunkat (image), konténerünket (container) és még meg is osztottuk a Docker Hub-on ezeket. Sokmindent tudunk már, de még közel sem eleget, úgyhogy innen fogjuk folytatni a munkát. Tartsatok majd velem!

Kövessetek a Facebook-on, és ha tetszik a munkám, akkor támogassátok néhány euróval a blog és az oldal fennmaradását a "buymeacoffee" (kávé) ikon útmutatásait követve.