Docker megértése

Több hónapja használom a Dockert a webes projektek fejlesztési/szállítási folyamatának felépítésére. A Habrakhabr olvasóinak felajánlom a dockerről szóló bevezető cikk fordítását - "A dokkoló megértése".

Mi az a docker?

A Docker egy nyílt platform alkalmazások fejlesztésére, szállítására és üzemeltetésére. A Dockert úgy tervezték, hogy gyorsabban szállítsa alkalmazásait. A docker segítségével leválaszthatja az alkalmazást az infrastruktúráról, és kezelt alkalmazásként kezelheti az infrastruktúrát. A Docker segítségével gyorsabban szállíthatja a kódot, gyorsabban tesztelheti, gyorsabban szállíthatja az alkalmazásokat, és csökkentheti a kód írása és a kód futtatása közötti időt. A Docker ezt egy könnyű konténervirtualizációs platformon keresztül teszi, olyan folyamatok és segédprogramok segítségével, amelyek segítenek az alkalmazások kezelésében és üzemeltetésében.

A docker lényegében szinte bármilyen alkalmazás futtatását teszi lehetővé, biztonságosan egy tárolóban elszigetelve. A biztonságos elkülönítés lehetővé teszi több tároló futtatását ugyanazon a gazdagépen egyidejűleg. A konténer könnyű jellege, amely a hipervizor további megterhelése nélkül fut, lehetővé teszi, hogy többet hozzon ki hardveréből.

A konténervirtualizációs platform és eszközök a következő esetekben lehetnek hasznosak:

  • csomagolja be az alkalmazást (és az Ön által használt alkatrészeket) dokkolótartályokba;
  • ezeknek a tárolóknak a szétosztása és szállítása a csapatok számára fejlesztés és tesztelés céljából;
  • elhelyezheti ezeket a tárolókat a termelési telephelyeken, adatközpontokban és felhőkben egyaránt.

Mire használhatom a dockert?

Gyorsan tegye közzé alkalmazásait

A Docker kiválóan alkalmas a fejlesztési ciklus megszervezésére. A Docker lehetővé teszi a fejlesztők számára, hogy helyi konténereket futtassanak alkalmazásokkal és szolgáltatásokkal. Ez a későbbiekben lehetővé teszi, hogy integrálódjon a folyamatos integrációs és telepítési munkafolyamatba.

Például a fejlesztők helyileg írnak kódot, és megosztják fejlesztői veremüket (Docker-képkészlet) a kollégákkal. Amikor készen állnak, leküldik a kódot és a tárolókat a teszthelyre, és lefuttatják a szükséges teszteket. A teszthelyről kódot és képeket küldhetnek a termelésbe.

Könnyebb kihelyezés és kibontás

A docker konténer alapú platform megkönnyíti a rakomány hordozását. A Docker-tárolók futhatnak a helyi gépen, akár valós, akár egy adatközpont virtuális gépén, vagy a felhőben.

A docker hordozhatósága és könnyű súlya megkönnyíti a munkaterhelés dinamikus kezelését. A docker segítségével telepítheti vagy leállíthatja alkalmazását vagy szolgáltatásait. A docker sebessége lehetővé teszi, hogy ez közel valós időben történjen.

Nagyobb terhelés és több hasznos teher

A Docker könnyű és gyors. Rugalmas, költséghatékony alternatívát kínál a hypervisor alapú virtuális gépekkel szemben. Különösen hasznos nagy terhelésű környezetekben, például saját felhő vagy platform-as-service létrehozásakor. De kis és közepes méretű alkalmazásoknál is hasznos, ha többet szeretne kihozni a rendelkezésére álló erőforrásokból.

A Docker fő összetevői

A Docker két fő összetevőből áll:

  • Docker: nyílt forráskódú virtualizációs platform;
  • Docker Hub: Platformunk a Docker-konténerek terjesztéséhez és kezeléséhez.

Jegyzet! A Dockert az Apache 2.0 licenc alatt terjesztik.

Docker architektúra

A Docker kliens-szerver architektúrát használ. A Docker-ügyfél kommunikál a Docker-démonnal, amely átveszi a tárolók létrehozásának, futtatásának és elosztásának terhét. A kliens és a szerver is futhat ugyanazon a rendszeren, a klienst egy távoli docker démonhoz csatlakoztathatja. A kliens és a szerver socketen vagy RESTful API-n keresztül kommunikál.

Docker megértése

Docker démon

Ahogy az ábrán látható, a démon a gazdagépen fut. A felhasználó nem lép kapcsolatba közvetlenül a szerverrel, hanem a klienst használja erre.

Docker kliens

A Docker kliens, a docker program a Docker fő felülete. Parancsokat kap a felhasználótól, és interakcióba lép a docker démonnal.

Belső dokkoló

Ahhoz, hogy megértse, miből áll a docker, három összetevőt kell ismernie:

  • képeket
  • Iktató hivatal
  • Konténerek

ábrázolás

A Docker-kép csak olvasható sablon. Például a kép tartalmazhatja az Ubuntu operációs rendszert Apache-val és egy alkalmazást. A képeket konténerek létrehozására használják. A Docker segítségével egyszerűen hozhat létre új képeket, frissítheti a meglévőket, vagy letöltheti mások által készített képeket. A képek a docker build összetevői.

Реестр

A Docker rendszerleíró adatbázis képeket tárol. Vannak nyilvános és privát nyilvántartások, amelyekből képeket tölthet le vagy tölthet fel. Nyilvános Docker-nyilvántartás Docker hub. Hatalmas képgyűjtemény van ott tárolva. Mint tudja, a képeket Ön is létrehozhatja, vagy használhatja mások által készített képeket. A nyilvántartások terjesztési összetevők.

konténerek

A tárolók hasonlóak a könyvtárakhoz. A tárolók mindent tartalmaznak, amire az alkalmazásnak szüksége van. Minden tároló egy képből jön létre. A tárolók létrehozhatók, elindíthatók, leállíthatók, migrálhatók vagy törölhetők. Minden tároló elszigetelt, és biztonságos platformot biztosít az alkalmazás számára. A konténerek a munka részei.

Tehát hogyan működik a Docker?

Eddig azt tudjuk, hogy:

  • képeket készíthetünk, amelyekben az alkalmazásaink találhatók;
  • konténereket készíthetünk képekből az alkalmazások futtatásához;
  • A képeket Docker Hubon vagy más képregisztrációs adatbázison keresztül terjeszthetjük.

Nézzük meg, hogyan illeszkednek egymáshoz ezek az alkatrészek.

Hogyan működik a kép?

Azt már tudjuk, hogy a kép egy csak olvasható sablon, amelyből egy konténer jön létre. Minden kép egy sor szintből áll. Docker használ union fájlrendszer hogy ezeket a szinteket egy képbe egyesítsék. Az Uniós fájlrendszer lehetővé teszi a különböző fájlrendszerekből (különböző ágakból) származó fájlok és könyvtárak átlátható átfedését, így koherens fájlrendszer jön létre.

A docker könnyű súlyának egyik oka az, hogy ilyen rétegeket használ. Amikor módosítja a képet, például egy alkalmazást frissít, egy új réteg jön létre. Tehát a teljes kép cseréje vagy újjáépítése nélkül, ahogyan egy virtuális gép esetében meg kell tenni, csak a réteg kerül hozzáadásra vagy frissítésre. És nem kell a teljes új képet terjeszteni, csak a frissítés kerül kiosztásra, így könnyebb és gyorsabb a képek terjesztése.

Minden kép középpontjában egy alapkép áll. Például az ubuntu, az Ubuntu alapképe, vagy a fedora, a Fedora disztribúció alapképe. A képeket új képek készítésének alapjaként is használhatja. Például, ha rendelkezik egy apache képfájllal, használhatja azt webalkalmazásai alapképeként.

Jegyzet! A Docker általában a Docker Hub rendszerleíró adatbázisából gyűjti be a képeket.

Ezekből az alapképekből Docker-képek hozhatók létre; a képek létrehozásának lépéseit utasításoknak nevezzük. Minden utasítás új képet vagy szintet hoz létre. Az utasítások a következők lesznek:

  • parancs futtatása
  • fájl vagy könyvtár hozzáadása
  • környezeti változó létrehozása
  • utasításokat, hogy mit kell futtatni a kép tárolójának elindításakor

Ezek az utasítások egy fájlban vannak tárolva Dockerfile. Docker ezt olvassa Dockerfile, a kép összeállításakor végrehajtja ezeket az utasításokat, és visszaadja a végső képet.

Hogyan működik a docker registry?

A rendszerleíró adatbázis a docker képek tárháza. A kép létrehozása után közzéteheti azt a nyilvános Docker Hub nyilvántartásban vagy a személyes nyilvántartásban.

A docker kliens segítségével megkeresheti a már közzétett képeket, és letöltheti azokat a docker-gépére tárolók létrehozásához.

A Docker Hub nyilvános és privát képtárakat biztosít. A nyilvános adattárakból való képek keresése és letöltése mindenki számára elérhető. A magántárhelyek tartalma nem szerepel a keresési eredmények között. És csak Ön és felhasználói kaphatják meg ezeket a képeket, és hozhatnak létre tárolókat belőlük.

Hogyan működik egy konténer?

A tároló egy operációs rendszerből, felhasználói fájlokból és metaadatokból áll. Mint tudjuk, minden tároló egy képből jön létre. Ez a kép tájékoztatja a dockert, hogy mi van a tárolóban, milyen folyamatot kell elindítani, mikor indul a tároló, és más konfigurációs adatok. A Docker-kép csak olvasható. Amikor a Docker elindít egy tárolót, egy olvasási/írási réteget hoz létre a kép tetején (az union fájlrendszer használatával, ahogyan korábban említettük), amelyben az alkalmazás futhat.

Mi történik, ha a konténer elindul?

Vagy a program használatával docker, vagy a RESTful API használatával a docker-kliens utasítja a docker-démont, hogy indítsa el a tárolót.

$ sudo docker run -i -t ubuntu /bin/bash

Nézzük meg ezt a parancsot. A kliens a paranccsal indul el docker, opcióval run, amely szerint új konténer kerül forgalomba. A tároló futtatásának minimális követelményei a következő attribútumok:

  • melyik képet használja a tároló létrehozásához. A mi esetünkben ubuntu
  • a tároló indításakor futtatni kívánt parancsot. A mi esetünkben /bin/bash

Mi történik a motorháztető alatt, amikor ezt a parancsot futtatjuk?

A Docker sorrendben a következőket teszi:

  • letölti az ubuntu képet: a dokkoló ellenőrzi a képek elérhetőségét ubuntu a helyi gépen, és ha nincs ott, akkor töltsd le innen Docker hub. Ha van kép, akkor azt egy tároló létrehozásához használja;
  • tárolót hoz létre: a kép fogadásakor a docker egy tároló létrehozásához használja azt;
  • inicializálja a fájlrendszert és csatlakoztatja a csak olvasható szintet: a tároló létrejön a fájlrendszerben, és a kép hozzáadásra kerül a csak olvasható szintre;
  • inicializálja a hálózatot/hidat: létrehoz egy hálózati interfészt, amely lehetővé teszi a docker számára, hogy kommunikáljon a gazdagéppel;
  • Az IP-cím beállítása: megkeresi és beállítja a címet;
  • Elindítja a megadott folyamatot: elindítja az alkalmazást;
  • Feldolgozza és előállítja az alkalmazás kimenetét: összeköti és naplózza az alkalmazás szabványos bemeneti, kimeneti és hibafolyamát, így nyomon követheti az alkalmazás teljesítményét.

Most már van egy működő konténer. Kezelheti tárolóját, interakcióba léphet az alkalmazással. Ha úgy dönt, hogy leállítja az alkalmazást, törölje a tárolót.

Használt technológiák

A Docker Go nyelven íródott, és a Linux kernel egyes funkcióit használja a fenti funkciók megvalósításához.

Névterek

A Docker technológiát használ namespaces elszigetelt munkaterületek szervezésére, amelyeket konténereknek nevezünk. Amikor elindítunk egy tárolót, a docker névtereket hoz létre az adott tárolóhoz.

Ez egy elszigetelt réteget hoz létre, amelyben a tároló minden eleme a saját névterében fut, és nem fér hozzá a külső rendszerhez.

A Docker által használt névterek listája:

  • pid: a folyamat elkülönítése;
  • háló: hálózati interfészek kezelésére;
  • ipc: az IPC erőforrások kezelésére. (ICP: InterProccess Communication);
  • mnt: rögzítési pontok kezelésére;
  • utc: a kernel és a vezérlő verziógenerálás elkülönítésére (UTC: Unix időmegosztási rendszer).

Kontroll csoportok

A Docker technológiát is használ cgroups vagy kontrollcsoportok. Az alkalmazások elkülönített futtatásának kulcsa, hogy az alkalmazást csak a kívánt erőforrásokkal látja el. Ez biztosítja, hogy a konténerek jó szomszédok legyenek. A vezérlőcsoportok lehetővé teszik az elérhető hardvererőforrások megosztását, és szükség esetén korlátok és korlátozások beállítását. Például korlátozza a tároló lehetséges memóriamennyiségét.

Union fájlrendszer

Az Union File Sysem vagy UnionFS egy olyan fájlrendszer, amely rétegek létrehozásával működik, így nagyon könnyű és gyors. A Docker az UnionFS segítségével hozza létre azokat a blokkokat, amelyekből a tároló épül. A Docker az UnionFS számos változatát használhatja, beleértve: AUFS, btrfs, vfs és DeviceMapper.

Tárolóformátumok

A Docker ezeket az összetevőket egy olyan burkolóba egyesíti, amelyet konténerformátumnak nevezünk. Az alapértelmezett formátumot hívják libcontainer. A Docker a hagyományos konténerformátumot is támogatja Linuxon évi LXC. A jövőben a Docker más tárolóformátumokat is támogathat. Például a BSD Jails vagy a Solaris Zones integrálása.

Forrás: will.com

Hozzászólás