Vissza a bloghoz

Adatmegosztás Docker konténerek között

Adatmegosztás Docker konténerek között

Bevezetés

Docker egy olyan konténerplatform, amely egy könnyű, virtualizált, hordozható, szoftveresen definiált szabványosított környezet, amely lehetővé teszi a szoftverek futtatását a fizikai gazdagépen futó más szoftverektől elkülönítve. A Docker a szoftverfejlesztés folyamatos fejlesztési és integrációs aspektusának meghatározó eleme. A konzisztens futtatókörnyezet biztosításával a Docker garantálja, hogy a szoftver ugyanúgy viselkedik, függetlenül attól, hogy milyen fizikai gazdagépen futtatják. A Docker-ökoszisztéma alapos áttekintéséhez tekintse meg ezt a cikket.

Bár a Docker konténerek önállóak, néha meg kell osztaniuk az adatokhoz való hozzáférést, vagy az adatokat a lemezre kell menteniük a konténer leállítása után. Az adatok lehetnek adatbázisok, naplófájlok vagy felhasználók által generált adatok formájában. Az ilyen adatokat lehetetlen beépíteni egy Docker-kép konfigurációs fájljába, de elérhetőnek kell lenniük ahhoz, hogy az alkalmazás az elvárásoknak megfelelően fusson. Az adatok megosztását és tartós megőrzését a Docker konténerekben a Docker Volumes kezeli. A Docker Volumes létrehozhatók a konténer létrehozása során, vagy létrehozhatók később is, és csatolhatók a konténerekhez. Ebben az útmutatóban a konténerek közötti adatmegosztás négy különböző módját fogjuk megvitatni.

Előfeltételek

Kérjük, vegye figyelembe, hogy bár az Ubuntu 20.04-es verziójával dolgozunk, a Dockerre vonatkozó utasítások és parancsok bármely más olyan operációs rendszeren is működnek, amelyre telepítve van a Docker, és a sudo felhasználó hozzá van adva a docker csoporthoz, a fenti előfeltételekben leírtak szerint.

1. lépés: Független Docker Volumes létrehozása

Kezdésként olyan független köteteket hozunk létre, amelyek nem kapcsolódnak egyetlen Docker konténerhez sem. Ehhez a következő parancs áll rendelkezésünkre: docker volume create, amelyet a Docker 1.9-es verziójában vezettek be. Írja be a következő parancsot egy Step1DataVolume :

A következő kimenetet kell látnia, amely jelzi, hogy a kötet létrehozása sikeres volt:

Docker Volume Create

Most, hogy van egy független kötetünk, példaként létrehozhatunk egy új konténert a hivatalos Ubuntu képből, hogy használatba vegyük azt. Írja be a következő parancsot a konténer létrehozásához és a kötet csatolásához:

Ebben a parancsban az --rm jelző automatikusan törli a konténert a kilépés után. A -v jelző a kötet megadására és csatolására szolgál. A -v jelző a kötet nevét, egy kettőspontot és a konténeren belüli abszolút útvonalat várja, ahol a kötetnek meg kell jelennie. Ne feledje, hogy a parancs futtatásakor, ha az útvonalban megadott könyvtárak nem léteznek, azok létrejönnek. Ha már léteznek, a csatolt kötet elrejti a meglévő tartalmat. A -ti jelző esetén a -t hozzáférést biztosít a terminálhoz, a -i pedig lehetővé teszi, hogy a terminálon keresztül interakcióba lépjünk a konténerrel.

A konténeren belül futtassa a következő parancsot, hogy adatokat írjon a kötetre:

Gépelje be az exit parancsot, és nyomja meg az enter billentyűt a konténerből való kilépéshez. Mint említettük, a konténer a kilépéskor automatikusan törlődik a --rm jelzőnek köszönhetően, azonban a kötet továbbra is elérhető marad.

Annak ellenőrzésére, hogy a kötet továbbra is létezik-e, használhatja a docker volume inspect parancsot:

A következő kimenetet kell látnia:

Docker Volume Inspect

Ezután hozzunk létre egy új konténert. Először csatoljuk a kötetet, és nézzük meg, hogy hozzáférünk-e az előző konténerben létrehozott szöveghez. Írja be a következő parancsot a konténer létrehozásához és futtatásához a ubuntu kép:

A konténeren belül futtassa az alábbi parancsot annak ellenőrzésére, hogy a StepOne.txt fájl létezik-e:

Hasonló kimenetet kell látnia:

Docker Volume Content 1

Ezután gépelje be a exit parancsot, majd nyomja meg az enter billentyűt a konténerből való kilépéshez. Ebben a lépésben megtanulta, hogyan kezelheti az adatok perzisztenciáját független Docker kötetek használatával, és hogyan csatolhat köteteket konténerekhez.

2. lépés: Olyan Docker kötet létrehozása, amely megőrzi az adatokat a konténer törlésekor

Ebben a lépésben egyetlen parancsot fogunk használni egy kötet létrehozására a konténer létrehozásával egy időben. Ezután töröljük a konténert, és a kötetet egy új konténerhez csatoljuk. A parancs hasonló az itt használthoz: 1. lépés, azonban hozzáadunk egy --name jelzőt a konténer nevének megadásához:

A konténeren belül adja ki a következő parancsot, hogy adatokat írjon a kötetre, és ellenőrizze, hogy az adatok ott vannak-e:

Alább látható a három parancs kimenete:

Persistent Docker Volume

Ezután lépjen ki a konténerből. Amikor a következő paranccsal újraindítja a konténert, a kötet automatikusan csatolódik:

A konténeren belül ellenőrizze, hogy a kötet csatolva van-e, ellenőrizve a StepTwo.txt fájl létezését a következő paranccsal:

Íme a kimenet:

Docker Volume After Restart

Most már kiléphet a konténerből. A Docker megakadályozza egy olyan kötet eltávolításának lehetőségét, amelyre egy másik konténer hivatkozik. Megpróbálhatja eltávolítani a kötetet a következő paranccsal:

A kimenetben a következő hibaüzenetet kell látnia:

Error Response

Távolítsuk el a konténert a kimenetben látható konténer-azonosító (container id) segítségével a docker rm paranccsal:

Helyettesítse a kiemelt container id értéket a terminálon megjelenő konténer id azonosítójával. A parancs eltávolítja a konténert, de nem távolítja el a létrehozott kötetet. Az elérhető köteteket a következő docker volume ls paranccsal listázhatja az ellenőrzéshez:

Íme a kimenet:

Docker Volume List

A Step 2 létrehozott konténer eltávolításához adja ki a következő parancsot:

Ebben a lépésben sikerült egy Docker kötetet létrehoznia a konténer létrehozásával egy időben. Lássuk, hogyan hozhatunk létre kötetet egy már létező, adatokat tartalmazó könyvtárból.

3. lépés: Docker kötet létrehozása egy már létező, adatokat tartalmazó könyvtárból

Ha adatokat szeretne másolni egy kötetre, létrehozhat egy kötetet a konténer létrehozása közben, és megadhatja az alapértelmezett képfájlban (base image) az adatokat tartalmazó könyvtár elérési útját. Az alábbi parancsban létrehozunk egy konténert, és hozzáadunk egy adatkötetet a /var könyvtárnál, amely az alapértelmezett képfájlban adatokat tartalmazó könyvtár:

A parancs futtatásakor az alapértelmezett képfájl /var könyvtárának tartalma átmásolódik a kötetre. A kötet ezután csatolható egy új konténerhez. Ezután lépjen ki a konténerből:

Create Docker Volume

Adja ki a következő parancsot a konténer létrehozásához, a kötet csatolásához és a kötet tartalmának listázásához az ls paranccsal:

Hasonló kimenetet kell látnia a parancstól, amely az alapértelmezett képfájl /var könyvtárának másolata, amely most már elérhető a Step3DataVolume:

Copy Docker Volume

Bár a /var könyvtár csatolása, ahogy ebben a példában tettük, nem feltétlenül praktikus, segít megérteni, hogy az egyedi rendszerképekben létrehozott bármely könyvtárat csatolhatja egy Docker kötethez, hogy az adatok elérhetővé váljanak más konténerek számára.

4. lépés: Adatmegosztás több Docker konténer között

A legtöbb esetben azt szeretné, ha több konténer is hozzáférne egyetlen Docker kötet adataihoz. Az előző példákban csak egy konténerhez csatoltunk kötetet. Most megtanulhatja, hogyan csatolhat egy kötetet több konténerhez. Bár ezt könnyen megvalósíthatja, a Docker nem kezeli a fájlzárolást. Ha több konténer ír ugyanabba a kötetbe, a konténerekben futó alkalmazásokat egyedileg kell megterveznie a megosztott adattárakba történő írás kezelésére az adatsérülések elkerülése érdekében.

  • Hozza létre a Step4Container1 és Step4DataVolume

Használja a docker run parancsot a --name jelzővel egy nevesített konténer létrehozásához:

A konténeren belül futtassa a következő parancsot egy szöveges fájl létrehozásához és szöveg hozzáadásához:

Ezután lépjen ki a konténerből, és térjen vissza a gazdakörnyezetbe. Most egy másik konténert szeretnénk létrehozni, és csatolni hozzá a köteteket a Step4Container1 konténerből.

  • Hozza létre a Step4Container2 konténert, és csatolja a köteteket a Step4Container1

Futtassa a következő parancsot a Step4Container2 létrehozásához és a kötetek csatolásához a Step4Container1:

A konténeren belül használja a cat parancsot az adatok megmaradásának ellenőrzéséhez:

A következő kimenetet kell látnia:

Container Data Sharing

További szöveget fűzhetünk a fájlhoz a Step4Container2 konténerből a következő parancs beírásával:

Ezután lépjen ki a konténerből, és visszatérünk a Step4Container1 konténerhez, hogy ellenőrizzük, az adatok még mindig megvannak-e.

  • A Docker kötetben a különböző konténerek között végrehajtott változtatások ellenőrzése

A változtatások megtekintéséhez először indítsa újra a Step4Container1 konténert a következő paranccsal:

Ellenőrizze a változtatásokat a következő paranccsal:

Az alábbi képernyőképhez hasonló kimenetet kell látnia:

Copied Container Data

Miután ellenőrizte, hogy mindkét konténer képes adatokat írni és olvasni ugyanabba a kötetbe, most már kiléphet a konténerből. Mint említettük, a Docker nem kezeli a fájlzárolást, a konténerekben futó alkalmazáslogika feladata a megosztott adattárakhoz való írási-olvasási hozzáférés kezelése. A Docker lehetővé teszi a kötetek írásvédettként történő csatolását, hogy megakadályozza a véletlen adatsérülést az olyan konténerek által, amelyeknek csak írásvédett hozzáférésre van szükségük, a :ro hozzáadásával, amint azt a következő példa mutatja.

  • Kötet csatolása egy Docker konténerhez írásvédettként

Ebben a példában létrehozunk egy Step4Container3 nevű konténert. A létrehozási parancsban köteteket csatolunk a Step4Container1 konténerből, és hozzáadjuk a :ro opciót annak megadására, hogy ez a konténer írásvédett hozzáféréssel rendelkezik, de nem tud írni a kötetbe. Futtassa a következő parancsot a termináljában:

A konténerbe lépve a következő parancs beírásával olvashatja el a kötetben lévő szöveges fájlt:

Read Only Mount

Ha azonban megpróbálja eltávolítani a fájlt a következő paranccsal:

Egy ehhez hasonló hibaüzenetet fogsz kapni a terminálodban:

Read Only Error

Miután ellenőrizted az írási-olvasási jogosultságokat, kiléphetsz a konténerből. Ha szeretnéd törölni az ebben az útmutatóban létrehozott konténereket és kötetet, futtasd a következő parancsokat:

Ebben a lépésben megtanultad, hogyan oszthatsz meg adatokat több konténer között Docker kötetek használatával, valamint hogyan csatolhatsz adatköteteket a konténerekhez csak olvashatóként.

Összegzés

Ebben az útmutatóban létrehoztál néhány Docker kötetet, és megtanultad, hogyan oszthatsz meg adatokat Docker konténerek között. A konténerek közötti adatmegosztás során megjegyeztük, hogy a konténeren belüli egyedi alkalmazáslogikának kell kezelnie a fájlzárolást az adatsérülés elkerülése érdekében a megosztott adattárolókba történő íráskor, mivel a Docker nem rendelkezik beépített megoldással a fájlzárolás kezelésére.

A Docker használatával kapcsolatos további forrásokért érdemes megnézned a további útmutatókat a blogunkon:

Kellemes számítástechnikát!

author

Pranay Kapgate

Szerző · CloudSigma

Preslav Dobrev a CloudSigma kreatív tervezője, aki hagyományos és innovatív marketingcsatornák segítségével következetes vállalati identitás kialakítására összpontosít. Kiemelkedően képes ötvözni a művészi látásmódot a stratégiai marketinggel, hogy hatásos márkatörténeteket hozzon létre.

Hozzászólások

Még nincsenek hozzászólások. Legyen Ön az első.