Egyéb informatika

Cikkek informatika témában, amik más kategóriákba nem fértek bele

Docker EXPOSE vagy nem EXPOSE. Ez itt a kérdés

Borító kép a videóból kivágva

Ebben a videóban a Docker EXPOSE funkcióját fogom bemutatni. Valószínűleg sokaknak nem egyértelmű, ahogy nekem sem volt az, hogy mire való, mikor számít. Ráadásul többféleképpen is lehet definiálni. Ideje a végére járni tehát, hogy mi is ez valójában. A videóhoz angol felirat is elérhető.

Megosztás/Mentés

Docker image készítése ős image nélkül, manuálisan a fájlok szerkesztésével

Borító kép a videóból kivágva

Az előző részben már elkészült az első Docker image Dockerfile nélkül, viszont használtunk ős image-et. A kérdés így még megmaradt: tudunk-e image-et készíteni ős image nélkül? A válasz igen. Ehhez kicsit jobban kell értenünk a Docker adatkönyvtárának a felépítését, de a videó végére pusztán a /var/lib/docker mappában levő fájlok írásával készítünk egy nagyon alap Docker image-et bármiféle ős nélkül.

Megosztás/Mentés

Docker image készítése docker build parancs használata nélkül

Borító kép powerpointtal szerkesztve

A Docker build-ről nem először van szó az I.T. szigeten és nem is utoljára. De vajon érted-e, mi zajlik a build parancs mögött? Lehet, hogy elsőre úgy tűnik, erre nincs is szükség, hiszen épp az a lényeg, hogy a Docker megoldjon mindent. Ha viszont hibát kell keresni, nagyon sokat jelent, hogy tudjuk-e, mire utalhat egy hibajelenség. Hacsak nincs valamilyen fizetős támogatásunk, akkor nem árt kicsit a színfalak mögé nézni. A következőkben azt mutatom be, hogyan lehet saját buildert is készíteni, amihez persze meg kell ismerni, milyen lépéseket végez el a builder és ezek alapján milyen lépéseket kel nekünk leprogramozni. A docker build összes funkcióját nem programozzuk le, de éppen eleget ahhoz, hogy egy hiba esetén már legyen fogalmad arról, hogyad légy önmagad supportja.

Megosztás/Mentés

Systemd indítása Ubuntu 20.04-es Docker konténerben

Borító kép powerpointtal szerkesztve

A Systemd egy olyan init rendszer és processzkezelő, ami rengeteg funkciót ellát és nem telepítjük Docker konténerben, ha van más mód. És általában van más mód. De előfordulhat, hogy mégis szükséges konténerben alkalmazni, mert egy olyan szoftvert kell telepíteni majd egy szerveren, amit jó lenne kipróbálni előtte. Ansible esetén gyakori megoldás. De az is lehet, hogy tényleg tegnapra kell valami és valamiért nem opció a hoszt rendszerre telepítés, viszont nincs idő jól megoldani. Ilyenkor marad a konténerben, csomagkezelővel telepítés, ami viszont gyakran Systemd-t igényel. Bemutatok egy megoldást Ubuntu 20.04-es konténerben és kitérek arra is, mi bajt okozhat a grafikus felületünknek a hibás konfiguráció.

Megosztás/Mentés

Több processz indítása Docker konténerben

Borító kép powerpointtal szerkesztve

Hogy mi a jelentősége annak, hogy a Docker konténerekben megfelelően állítsuk össze a futtatandó parancsot és a "docker stop" parancs ne vezessen adatvesztéshez, arról már volt szó. Minden eddigi megoldás viszont leginkább egyetlen program esetén volt jó, ráadásul megfelelő gyakorlat nélkül nagyobb az esélye annak, hogy valamit elhibázunk. Ha ráadásul több, a háttérben futó programot kellene kezelni egyetlen konténerben, annak leprogramozása shell szkriptben még nagyobb odafigyelést igényelne. Bár általában elkerüljük ezt a utat és minden program külön konténert kap, vannak olyan esetek, amikor ezt nem tudjuk megtenni. Ilyenkor kell keresnünk egy olyan eszközt, ami kezeli a háttérben futó szolgáltatások processzeit, beleértve a standard inputot és az error streamet is. Docker konténereknél talán a legelterjedtebb megoldás a Supervisor. A következőkben a korábban használt Python HTTP servert és az Apache HTTPD szervert fogom egy konténerben indítani.

Megosztás/Mentés

Kis méretű Docker image készítése Go nyelven

Borító kép zöld GO gombbal a pixabay.com-ról powerpointtal szerkesztve

A Docker konténerekkel találkozva nem telik el sok idő, míg szembesülünk Go nyelvvel vagy legalább a Go template-tel, mivel a Docker is Go nyelven készült és a Docker kliensnél is használhatunk Go template-et bizonyos kimenetek formázására. Talán már hallottál arról is, hogy lehet készíteni Go-ban olyan programokat is, amikből egyetlen bináris generálható, ami aztán könnyedén használható konténerben is. Ha minden függőségünk benne van ebben a fájlban, mivel a legtöbb esetben a konténerben levő alap Linux fájlrendszert úgysem használjuk ki, azt akár teljesen el is hagyhatjuk és egy "scratch" image-re építve elkészíthetjük az egyetlen binárist tartalmazó Docker image-ünket, így egy nagyon kis méretű image-et eredményezve. Mutatom, hogy build-elheted a legegyszerűbb Go programot, mik azok, amikre valószínűleg még szükséged lehet és mi kell ahhoz, hogy Docker konténerben is működjön a build.

Megosztás/Mentés

Docker konténerek helyes leállítása adatvesztés nélkül

Borító kép stop táblával a pixabay.com-ról powerpointtal szerkesztve

Van egy fajta bizalmatlanság a Docker konténerekkel szemben, aminek az egyik oka az is lehet, hogy ha a Docker image-et nem jól készítjük el, vagy az indításkor rosszul használjuk a paramétereket, akár olyan jelenséghez is vezethet, hogy a konténer leállításakor adatok sérülnek és az alkalmazás legközelebb akár el sem indul. Ez persze nem egy mindennapos dolog, de tény, hogy aki konténerekben szeretne programokat futtatni, jobban meg kell ismerkedjen a Linuxszal, a processzek közti kommunikációval, signalok kezelésével és azzal, hogy ezeket hogyan befolyásolják a Dockerfile-ban definiált SHELL, ENTRPYOINT és CMD direktívák. Ha te is szeretnéd elkerülni az említett problémát, vagy csak régóta töprengsz azon, mi történik a Docker konténerek leállításakor, akkor ez a cikk neked készült.

Megosztás/Mentés

Minden, amit tudni akartál a Docker konténerekben futtatott parancs összeállításáról

Borítókép címmel és SHELL ikonnal PowerPoint-tal generálva.

A Docker konténerekben időnként anélkül is el lehet veszni, hogy egy három komponensből álló parancs elemeinek kapcsolatán kellene gondolkodni és megválasztani a helyes megoldást. Bár első ránézésre egyszerűnek tűnik, van azért néhány olyan tényező, amit talán te sem ismertél. A videó befejezése után viszont már te is bevetésre készen állsz majd, hogy mindig pontosan úgy fussanak a programok a konténereidben, ahogy azt megálmodtad.

Megosztás/Mentés

Naplózás Docker konténerekben

Borítókép címmel és neon fény hatású háromszöggel PowerPoint-tal generálva.

A Docker konténerekben futó alkalmazások naplóbejegyzéseit általában a "docker logs" paranccsal kérdezhetjük le.
Hogyha ezt lefutattom a parancssorban, akkor minden naplóbejegyzés ki fog kerülni a képernyőre. A kérdés az, hogy hogy kerül ide. Honnan tudja a "docker logs", hogy honnan kell a naplóbejegyzéseket lekérdezni? A mellékelt videóban bemutatom a Docker konténereknél a naplóbejegyzések kezelésének alapjait, majd benézünk a motorháztető alá, miért is működik a logok lekérdezése és hogyan érhetjük el az aktuális logokat akkor is, ha a korábbi logok mentése le van tiltva.

Megosztás/Mentés

Nginx és docker-gen futtatása külön konténerben

Borítókép címmel és hálózati csatlakozó képével PowerPoint-tal generálva.

A múlt alkalommal megmutattam, hogyan lehet úgy Docker konténerekkel konfigurálni weboldalakat, hogy előttük van egy NginX proxy, ami a különböző domainekre érkező kéréseket továbbítja különböző konténerek felé. Ezt viszont eddig egy darab konténerrel oldottuk meg, ami tartalmazta egyszerre a "docker-gen"-t, ami generálta a konfigurációs fájlt és az NginX szervert is. A "docker-gen"-nek viszont fel kell csatoltunk a Docker socket fájlt, hogy el tudja érni a Docker API-t, amiből le tud kérni információkat, hogy le tudja generálni a konfigurációs fájlt. Ilyenkor viszont, ha valaki mégis csak be tud jutni az NginX szerveren keresztül a konténerbe, akkor gyakorlatilag minden Docker konténerünkhöz hozzáfér. Ezt elkerülendő szét fogjuk választani a "docke-gen"-t az NginX szervertől két külön konténerbe, és ezek után már csak a "docker-gen" fogja tudni elérni a Docker API-t.

Megosztás/Mentés